blob: d87abc8ae5123047716a53751362ecefddb2ca8c [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 Jakob28f98aa2015-10-13 02:57:16 +020015Operator overloading
16====================
17
Wenzel Jakob93296692015-10-13 23:21:54 +020018Suppose that we're given the following ``Vector2`` class with a vector addition
19and scalar multiplication operation, all implemented using overloaded operators
20in C++.
21
22.. code-block:: cpp
23
24 class Vector2 {
25 public:
26 Vector2(float x, float y) : x(x), y(y) { }
27
28 std::string toString() const { return "[" + std::to_string(x) + ", " + std::to_string(y) + "]"; }
29
30 Vector2 operator+(const Vector2 &v) const { return Vector2(x + v.x, y + v.y); }
31 Vector2 operator*(float value) const { return Vector2(x * value, y * value); }
32 Vector2& operator+=(const Vector2 &v) { x += v.x; y += v.y; return *this; }
33 Vector2& operator*=(float v) { x *= v; y *= v; return *this; }
34
35 friend Vector2 operator*(float f, const Vector2 &v) { return Vector2(f * v.x, f * v.y); }
36
37 private:
38 float x, y;
39 };
40
41The following snippet shows how the above operators can be conveniently exposed
42to Python.
43
44.. code-block:: cpp
45
Wenzel Jakob8f4eb002015-10-15 18:13:33 +020046 #include <pybind11/operators.h>
Wenzel Jakob93296692015-10-13 23:21:54 +020047
Wenzel Jakobb1b71402015-10-18 16:48:30 +020048 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +020049 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +020050
51 py::class_<Vector2>(m, "Vector2")
52 .def(py::init<float, float>())
53 .def(py::self + py::self)
54 .def(py::self += py::self)
55 .def(py::self *= float())
56 .def(float() * py::self)
57 .def("__repr__", &Vector2::toString);
58
59 return m.ptr();
60 }
61
62Note that a line like
63
64.. code-block:: cpp
65
66 .def(py::self * float())
67
68is really just short hand notation for
69
70.. code-block:: cpp
71
72 .def("__mul__", [](const Vector2 &a, float b) {
73 return a * b;
74 })
75
76This can be useful for exposing additional operators that don't exist on the
77C++ side, or to perform other types of customization.
78
79.. note::
80
81 To use the more convenient ``py::self`` notation, the additional
Wenzel Jakob8f4eb002015-10-15 18:13:33 +020082 header file :file:`pybind11/operators.h` must be included.
Wenzel Jakob93296692015-10-13 23:21:54 +020083
84.. seealso::
85
86 The file :file:`example/example3.cpp` contains a complete example that
87 demonstrates how to work with overloaded operators in more detail.
88
89Callbacks and passing anonymous functions
90=========================================
91
92The C++11 standard brought lambda functions and the generic polymorphic
93function wrapper ``std::function<>`` to the C++ programming language, which
94enable powerful new ways of working with functions. Lambda functions come in
95two flavors: stateless lambda function resemble classic function pointers that
96link to an anonymous piece of code, while stateful lambda functions
97additionally depend on captured variables that are stored in an anonymous
98*lambda closure object*.
99
100Here is a simple example of a C++ function that takes an arbitrary function
101(stateful or stateless) with signature ``int -> int`` as an argument and runs
102it with the value 10.
103
104.. code-block:: cpp
105
106 int func_arg(const std::function<int(int)> &f) {
107 return f(10);
108 }
109
110The example below is more involved: it takes a function of signature ``int -> int``
111and returns another function of the same kind. The return value is a stateful
112lambda function, which stores the value ``f`` in the capture object and adds 1 to
113its return value upon execution.
114
115.. code-block:: cpp
116
117 std::function<int(int)> func_ret(const std::function<int(int)> &f) {
118 return [f](int i) {
119 return f(i) + 1;
120 };
121 }
122
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200123After including the extra header file :file:`pybind11/functional.h`, it is almost
Wenzel Jakob93296692015-10-13 23:21:54 +0200124trivial to generate binding code for both of these functions.
125
126.. code-block:: cpp
127
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200128 #include <pybind11/functional.h>
Wenzel Jakob93296692015-10-13 23:21:54 +0200129
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200130 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200131 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200132
133 m.def("func_arg", &func_arg);
134 m.def("func_ret", &func_ret);
135
136 return m.ptr();
137 }
138
139The following interactive session shows how to call them from Python.
140
141.. code-block:: python
142
143 $ python
144 >>> import example
145 >>> def square(i):
146 ... return i * i
147 ...
148 >>> example.func_arg(square)
149 100L
150 >>> square_plus_1 = example.func_ret(square)
151 >>> square_plus_1(4)
152 17L
153 >>>
154
155.. note::
156
157 This functionality is very useful when generating bindings for callbacks in
158 C++ libraries (e.g. a graphical user interface library).
159
160 The file :file:`example/example5.cpp` contains a complete example that
161 demonstrates how to work with callbacks and anonymous functions in more detail.
162
Wenzel Jakoba4175d62015-11-17 08:30:34 +0100163.. warning::
164
165 Keep in mind that passing a function from C++ to Python (or vice versa)
166 will instantiate a piece of wrapper code that translates function
167 invocations between the two languages. Copying the same function back and
168 forth between Python and C++ many times in a row will cause these wrappers
169 to accumulate, which can decrease performance.
170
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200171Overriding virtual functions in Python
172======================================
173
Wenzel Jakob93296692015-10-13 23:21:54 +0200174Suppose that a C++ class or interface has a virtual function that we'd like to
175to override from within Python (we'll focus on the class ``Animal``; ``Dog`` is
176given as a specific example of how one would do this with traditional C++
177code).
178
179.. code-block:: cpp
180
181 class Animal {
182 public:
183 virtual ~Animal() { }
184 virtual std::string go(int n_times) = 0;
185 };
186
187 class Dog : public Animal {
188 public:
189 std::string go(int n_times) {
190 std::string result;
191 for (int i=0; i<n_times; ++i)
192 result += "woof! ";
193 return result;
194 }
195 };
196
197Let's also suppose that we are given a plain function which calls the
198function ``go()`` on an arbitrary ``Animal`` instance.
199
200.. code-block:: cpp
201
202 std::string call_go(Animal *animal) {
203 return animal->go(3);
204 }
205
206Normally, the binding code for these classes would look as follows:
207
208.. code-block:: cpp
209
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200210 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200211 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200212
213 py::class_<Animal> animal(m, "Animal");
214 animal
215 .def("go", &Animal::go);
216
217 py::class_<Dog>(m, "Dog", animal)
218 .def(py::init<>());
219
220 m.def("call_go", &call_go);
221
222 return m.ptr();
223 }
224
225However, these bindings are impossible to extend: ``Animal`` is not
226constructible, and we clearly require some kind of "trampoline" that
227redirects virtual calls back to Python.
228
229Defining a new type of ``Animal`` from within Python is possible but requires a
230helper class that is defined as follows:
231
232.. code-block:: cpp
233
234 class PyAnimal : public Animal {
235 public:
236 /* Inherit the constructors */
237 using Animal::Animal;
238
239 /* Trampoline (need one for each virtual function) */
240 std::string go(int n_times) {
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200241 PYBIND11_OVERLOAD_PURE(
Wenzel Jakob93296692015-10-13 23:21:54 +0200242 std::string, /* Return type */
243 Animal, /* Parent class */
244 go, /* Name of function */
245 n_times /* Argument(s) */
246 );
247 }
248 };
249
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200250The macro :func:`PYBIND11_OVERLOAD_PURE` should be used for pure virtual
251functions, and :func:`PYBIND11_OVERLOAD` should be used for functions which have
Wenzel Jakob93296692015-10-13 23:21:54 +0200252a default implementation. The binding code also needs a few minor adaptations
253(highlighted):
254
255.. code-block:: cpp
256 :emphasize-lines: 4,6,7
257
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200258 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200259 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200260
261 py::class_<PyAnimal> animal(m, "Animal");
262 animal
263 .alias<Animal>()
264 .def(py::init<>())
265 .def("go", &Animal::go);
266
267 py::class_<Dog>(m, "Dog", animal)
268 .def(py::init<>());
269
270 m.def("call_go", &call_go);
271
272 return m.ptr();
273 }
274
275Importantly, the trampoline helper class is used as the template argument to
276:class:`class_`, and a call to :func:`class_::alias` informs the binding
277generator that this is merely an alias for the underlying type ``Animal``.
278Following this, we are able to define a constructor as usual.
279
280The Python session below shows how to override ``Animal::go`` and invoke it via
281a virtual method call.
282
283.. code-block:: cpp
284
285 >>> from example import *
286 >>> d = Dog()
287 >>> call_go(d)
288 u'woof! woof! woof! '
289 >>> class Cat(Animal):
290 ... def go(self, n_times):
291 ... return "meow! " * n_times
292 ...
293 >>> c = Cat()
294 >>> call_go(c)
295 u'meow! meow! meow! '
296
297.. seealso::
298
299 The file :file:`example/example12.cpp` contains a complete example that
300 demonstrates how to override virtual functions using pybind11 in more
301 detail.
302
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100303
304Global Interpreter Lock (GIL)
305=============================
306
307The classes :class:`gil_scoped_release` and :class:`gil_scoped_acquire` can be
308used to acquire and release the global interpreter lock in the body of a C++
309function call. In this way, long-running C++ code can be parallelized using
310multiple Python threads. Taking the previous section as an example, this could
311be realized as follows (important changes highlighted):
312
313.. code-block:: cpp
314 :emphasize-lines: 8,9,33,34
315
316 class PyAnimal : public Animal {
317 public:
318 /* Inherit the constructors */
319 using Animal::Animal;
320
321 /* Trampoline (need one for each virtual function) */
322 std::string go(int n_times) {
323 /* Acquire GIL before calling Python code */
Wenzel Jakoba4caa852015-12-14 12:39:02 +0100324 py::gil_scoped_acquire acquire;
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100325
326 PYBIND11_OVERLOAD_PURE(
327 std::string, /* Return type */
328 Animal, /* Parent class */
329 go, /* Name of function */
330 n_times /* Argument(s) */
331 );
332 }
333 };
334
335 PYBIND11_PLUGIN(example) {
336 py::module m("example", "pybind11 example plugin");
337
338 py::class_<PyAnimal> animal(m, "Animal");
339 animal
340 .alias<Animal>()
341 .def(py::init<>())
342 .def("go", &Animal::go);
343
344 py::class_<Dog>(m, "Dog", animal)
345 .def(py::init<>());
346
347 m.def("call_go", [](Animal *animal) -> std::string {
348 /* Release GIL before calling into (potentially long-running) C++ code */
Wenzel Jakoba4caa852015-12-14 12:39:02 +0100349 py::gil_scoped_release release;
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100350 return call_go(animal);
351 });
352
353 return m.ptr();
354 }
355
Wenzel Jakob93296692015-10-13 23:21:54 +0200356Passing STL data structures
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200357===========================
358
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200359When including the additional header file :file:`pybind11/stl.h`, conversions
Jared Casper6be9e2f2015-12-15 15:56:14 -0800360between ``std::vector<>``, ``std::set<>``, and ``std::map<>`` and the Python
Wenzel Jakob44db04f2015-12-14 12:40:45 +0100361``list``, ``set`` and ``dict`` data structures are automatically enabled. The
362types ``std::pair<>`` and ``std::tuple<>`` are already supported out of the box
363with just the core :file:`pybind11/pybind11.h` header.
Wenzel Jakob93296692015-10-13 23:21:54 +0200364
365.. note::
366
Wenzel Jakob44db04f2015-12-14 12:40:45 +0100367 Arbitrary nesting of any of these types is supported.
Wenzel Jakob93296692015-10-13 23:21:54 +0200368
369.. seealso::
370
371 The file :file:`example/example2.cpp` contains a complete example that
372 demonstrates how to pass STL data types in more detail.
373
374Binding sequence data types, the slicing protocol, etc.
375=======================================================
376
377Please refer to the supplemental example for details.
378
379.. seealso::
380
381 The file :file:`example/example6.cpp` contains a complete example that
382 shows how to bind a sequence data type, including length queries
383 (``__len__``), iterators (``__iter__``), the slicing protocol and other
384 kinds of useful operations.
385
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200386Return value policies
387=====================
388
Wenzel Jakob93296692015-10-13 23:21:54 +0200389Python and C++ use wildly different ways of managing the memory and lifetime of
390objects managed by them. This can lead to issues when creating bindings for
391functions that return a non-trivial type. Just by looking at the type
392information, it is not clear whether Python should take charge of the returned
393value and eventually free its resources, or if this is handled on the C++ side.
394For this reason, pybind11 provides a several `return value policy` annotations
395that can be passed to the :func:`module::def` and :func:`class_::def`
Wenzel Jakob61d67f02015-12-14 12:53:06 +0100396functions. The default policy is :enum:`return_value_policy::automatic`.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200397
Wenzel Jakob93296692015-10-13 23:21:54 +0200398
399+--------------------------------------------------+---------------------------------------------------------------------------+
400| Return value policy | Description |
401+==================================================+===========================================================================+
402| :enum:`return_value_policy::automatic` | Automatic: copy objects returned as values and take ownership of |
403| | objects returned as pointers |
404+--------------------------------------------------+---------------------------------------------------------------------------+
405| :enum:`return_value_policy::copy` | Create a new copy of the returned object, which will be owned by Python |
406+--------------------------------------------------+---------------------------------------------------------------------------+
407| :enum:`return_value_policy::take_ownership` | Reference the existing object and take ownership. Python will call |
408| | the destructor and delete operator when the reference count reaches zero |
409+--------------------------------------------------+---------------------------------------------------------------------------+
410| :enum:`return_value_policy::reference` | Reference the object, but do not take ownership and defer responsibility |
411| | for deleting it to C++ (dangerous when C++ code at some point decides to |
412| | delete it while Python still has a nonzero reference count) |
413+--------------------------------------------------+---------------------------------------------------------------------------+
414| :enum:`return_value_policy::reference_internal` | Reference the object, but do not take ownership. The object is considered |
415| | be owned by the C++ instance whose method or property returned it. The |
416| | Python object will increase the reference count of this 'parent' by 1 |
417| | to ensure that it won't be deallocated while Python is using the 'child' |
418+--------------------------------------------------+---------------------------------------------------------------------------+
419
420.. warning::
421
422 Code with invalid call policies might access unitialized memory and free
423 data structures multiple times, which can lead to hard-to-debug
424 non-determinism and segmentation faults, hence it is worth spending the
425 time to understand all the different options above.
426
427See below for an example that uses the
428:enum:`return_value_policy::reference_internal` policy.
429
430.. code-block:: cpp
431
432 class Example {
433 public:
434 Internal &get_internal() { return internal; }
435 private:
436 Internal internal;
437 };
438
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200439 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200440 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200441
442 py::class_<Example>(m, "Example")
443 .def(py::init<>())
444 .def("get_internal", &Example::get_internal, "Return the internal data", py::return_value_policy::reference_internal)
445
446 return m.ptr();
447 }
448
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100449
450Additional call policies
451========================
452
453In addition to the above return value policies, further `call policies` can be
454specified to indicate dependencies between parameters. There is currently just
455one policy named ``keep_alive<Nurse, Patient>``, which indicates that the
456argument with index ``Patient`` should be kept alive at least until the
457argument with index ``Nurse`` is freed by the garbage collector; argument
458indices start at one, while zero refers to the return value. Arbitrarily many
459call policies can be specified.
460
461For instance, binding code for a a list append operation that ties the lifetime
462of the newly added element to the underlying container might be declared as
463follows:
464
465.. code-block:: cpp
466
467 py::class_<List>(m, "List")
468 .def("append", &List::append, py::keep_alive<1, 2>());
469
470.. note::
471
472 ``keep_alive`` is analogous to the ``with_custodian_and_ward`` (if Nurse,
473 Patient != 0) and ``with_custodian_and_ward_postcall`` (if Nurse/Patient ==
474 0) policies from Boost.Python.
475
Wenzel Jakob61587162016-01-18 22:38:52 +0100476.. seealso::
477
478 The file :file:`example/example13.cpp` contains a complete example that
479 demonstrates using :class:`keep_alive` in more detail.
480
Wenzel Jakob93296692015-10-13 23:21:54 +0200481Implicit type conversions
482=========================
483
484Suppose that instances of two types ``A`` and ``B`` are used in a project, and
485that an ``A`` can easily be converted into a an instance of type ``B`` (examples of this
486could be a fixed and an arbitrary precision number type).
487
488.. code-block:: cpp
489
490 py::class_<A>(m, "A")
491 /// ... members ...
492
493 py::class_<B>(m, "B")
494 .def(py::init<A>())
495 /// ... members ...
496
497 m.def("func",
498 [](const B &) { /* .... */ }
499 );
500
501To invoke the function ``func`` using a variable ``a`` containing an ``A``
502instance, we'd have to write ``func(B(a))`` in Python. On the other hand, C++
503will automatically apply an implicit type conversion, which makes it possible
504to directly write ``func(a)``.
505
506In this situation (i.e. where ``B`` has a constructor that converts from
507``A``), the following statement enables similar implicit conversions on the
508Python side:
509
510.. code-block:: cpp
511
512 py::implicitly_convertible<A, B>();
513
514Smart pointers
515==============
516
517The binding generator for classes (:class:`class_`) takes an optional second
518template type, which denotes a special *holder* type that is used to manage
519references to the object. When wrapping a type named ``Type``, the default
520value of this template parameter is ``std::unique_ptr<Type>``, which means that
521the object is deallocated when Python's reference count goes to zero.
522
Wenzel Jakob1853b652015-10-18 15:38:50 +0200523It is possible to switch to other types of reference counting wrappers or smart
524pointers, which is useful in codebases that rely on them. For instance, the
525following snippet causes ``std::shared_ptr`` to be used instead.
Wenzel Jakob93296692015-10-13 23:21:54 +0200526
527.. code-block:: cpp
528
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100529 py::class_<Example, std::shared_ptr<Example> /* <- holder type */> obj(m, "Example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100530
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100531Note that any particular class can only be associated with a single holder type.
Wenzel Jakob93296692015-10-13 23:21:54 +0200532
Wenzel Jakob1853b652015-10-18 15:38:50 +0200533To enable transparent conversions for functions that take shared pointers as an
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100534argument or that return them, a macro invocation similar to the following must
Wenzel Jakob1853b652015-10-18 15:38:50 +0200535be declared at the top level before any binding code:
536
537.. code-block:: cpp
538
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200539 PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr<T>);
Wenzel Jakob1853b652015-10-18 15:38:50 +0200540
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100541.. note::
Wenzel Jakob61d67f02015-12-14 12:53:06 +0100542
543 The first argument of :func:`PYBIND11_DECLARE_HOLDER_TYPE` should be a
544 placeholder name that is used as a template parameter of the second
545 argument. Thus, feel free to use any identifier, but use it consistently on
546 both sides; also, don't use the name of a type that already exists in your
547 codebase.
548
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100549One potential stumbling block when using holder types is that they need to be
550applied consistently. Can you guess what's broken about the following binding
551code?
Wenzel Jakob6e213c92015-11-24 23:05:58 +0100552
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100553.. code-block:: cpp
Wenzel Jakob6e213c92015-11-24 23:05:58 +0100554
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100555 class Child { };
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100556
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100557 class Parent {
558 public:
559 Parent() : child(std::make_shared<Child>()) { }
560 Child *get_child() { return child.get(); } /* Hint: ** DON'T DO THIS ** */
561 private:
562 std::shared_ptr<Child> child;
563 };
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100564
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100565 PYBIND11_PLUGIN(example) {
566 py::module m("example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100567
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100568 py::class_<Child, std::shared_ptr<Child>>(m, "Child");
569
570 py::class_<Parent, std::shared_ptr<Parent>>(m, "Parent")
571 .def(py::init<>())
572 .def("get_child", &Parent::get_child);
573
574 return m.ptr();
575 }
576
577The following Python code will cause undefined behavior (and likely a
578segmentation fault).
579
580.. code-block:: python
581
582 from example import Parent
583 print(Parent().get_child())
584
585The problem is that ``Parent::get_child()`` returns a pointer to an instance of
586``Child``, but the fact that this instance is already managed by
587``std::shared_ptr<...>`` is lost when passing raw pointers. In this case,
588pybind11 will create a second independent ``std::shared_ptr<...>`` that also
589claims ownership of the pointer. In the end, the object will be freed **twice**
590since these shared pointers have no way of knowing about each other.
591
592There are two ways to resolve this issue:
593
5941. For types that are managed by a smart pointer class, never use raw pointers
595 in function arguments or return values. In other words: always consistently
596 wrap pointers into their designated holder types (such as
597 ``std::shared_ptr<...>``). In this case, the signature of ``get_child()``
598 should be modified as follows:
599
600.. code-block:: cpp
601
602 std::shared_ptr<Child> get_child() { return child; }
603
6042. Adjust the definition of ``Child`` by specifying
605 ``std::enable_shared_from_this<T>`` (see cppreference_ for details) as a
606 base class. This adds a small bit of information to ``Child`` that allows
607 pybind11 to realize that there is already an existing
608 ``std::shared_ptr<...>`` and communicate with it. In this case, the
609 declaration of ``Child`` should look as follows:
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100610
Wenzel Jakob6e213c92015-11-24 23:05:58 +0100611.. _cppreference: http://en.cppreference.com/w/cpp/memory/enable_shared_from_this
612
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100613.. code-block:: cpp
614
615 class Child : public std::enable_shared_from_this<Child> { };
616
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100617.. seealso::
618
619 The file :file:`example/example8.cpp` contains a complete example that
620 demonstrates how to work with custom reference-counting holder types in
621 more detail.
622
Wenzel Jakob93296692015-10-13 23:21:54 +0200623.. _custom_constructors:
624
625Custom constructors
626===================
627
628The syntax for binding constructors was previously introduced, but it only
629works when a constructor with the given parameters actually exists on the C++
630side. To extend this to more general cases, let's take a look at what actually
631happens under the hood: the following statement
632
633.. code-block:: cpp
634
635 py::class_<Example>(m, "Example")
636 .def(py::init<int>());
637
638is short hand notation for
639
640.. code-block:: cpp
641
642 py::class_<Example>(m, "Example")
643 .def("__init__",
644 [](Example &instance, int arg) {
645 new (&instance) Example(arg);
646 }
647 );
648
649In other words, :func:`init` creates an anonymous function that invokes an
650in-place constructor. Memory allocation etc. is already take care of beforehand
651within pybind11.
652
653Catching and throwing exceptions
654================================
655
656When C++ code invoked from Python throws an ``std::exception``, it is
657automatically converted into a Python ``Exception``. pybind11 defines multiple
658special exception classes that will map to different types of Python
659exceptions:
660
661+----------------------------+------------------------------+
662| C++ exception type | Python exception type |
663+============================+==============================+
664| :class:`std::exception` | ``Exception`` |
665+----------------------------+------------------------------+
666| :class:`stop_iteration` | ``StopIteration`` (used to |
667| | implement custom iterators) |
668+----------------------------+------------------------------+
669| :class:`index_error` | ``IndexError`` (used to |
670| | indicate out of bounds |
671| | accesses in ``__getitem__``, |
672| | ``__setitem__``, etc.) |
673+----------------------------+------------------------------+
674| :class:`error_already_set` | Indicates that the Python |
675| | exception flag has already |
676| | been initialized. |
677+----------------------------+------------------------------+
678
679When a Python function invoked from C++ throws an exception, it is converted
680into a C++ exception of type :class:`error_already_set` whose string payload
681contains a textual summary.
682
683There is also a special exception :class:`cast_error` that is thrown by
684:func:`handle::call` when the input arguments cannot be converted to Python
685objects.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200686
687Buffer protocol
688===============
689
690Python supports an extremely general and convenient approach for exchanging
691data between plugin libraries. Types can expose a buffer view which provides
692fast direct access to the raw internal representation. Suppose we want to bind
693the following simplistic Matrix class:
694
695.. code-block:: cpp
696
697 class Matrix {
698 public:
699 Matrix(size_t rows, size_t cols) : m_rows(rows), m_cols(cols) {
700 m_data = new float[rows*cols];
701 }
702 float *data() { return m_data; }
703 size_t rows() const { return m_rows; }
704 size_t cols() const { return m_cols; }
705 private:
706 size_t m_rows, m_cols;
707 float *m_data;
708 };
709
710The following binding code exposes the ``Matrix`` contents as a buffer object,
711making it possible to cast Matrixes into NumPy arrays. It is even possible to
712completely avoid copy operations with Python expressions like
713``np.array(matrix_instance, copy = False)``.
714
715.. code-block:: cpp
716
717 py::class_<Matrix>(m, "Matrix")
718 .def_buffer([](Matrix &m) -> py::buffer_info {
719 return py::buffer_info(
720 m.data(), /* Pointer to buffer */
721 sizeof(float), /* Size of one scalar */
722 py::format_descriptor<float>::value(), /* Python struct-style format descriptor */
723 2, /* Number of dimensions */
724 { m.rows(), m.cols() }, /* Buffer dimensions */
725 { sizeof(float) * m.rows(), /* Strides (in bytes) for each index */
726 sizeof(float) }
727 );
728 });
729
730The snippet above binds a lambda function, which can create ``py::buffer_info``
731description records on demand describing a given matrix. The contents of
732``py::buffer_info`` mirror the Python buffer protocol specification.
733
734.. code-block:: cpp
735
736 struct buffer_info {
737 void *ptr;
738 size_t itemsize;
739 std::string format;
740 int ndim;
741 std::vector<size_t> shape;
742 std::vector<size_t> strides;
743 };
744
745To create a C++ function that can take a Python buffer object as an argument,
746simply use the type ``py::buffer`` as one of its arguments. Buffers can exist
747in a great variety of configurations, hence some safety checks are usually
748necessary in the function body. Below, you can see an basic example on how to
749define a custom constructor for the Eigen double precision matrix
750(``Eigen::MatrixXd``) type, which supports initialization from compatible
751buffer
752objects (e.g. a NumPy matrix).
753
754.. code-block:: cpp
755
756 py::class_<Eigen::MatrixXd>(m, "MatrixXd")
757 .def("__init__", [](Eigen::MatrixXd &m, py::buffer b) {
758 /* Request a buffer descriptor from Python */
759 py::buffer_info info = b.request();
760
761 /* Some sanity checks ... */
762 if (info.format != py::format_descriptor<double>::value())
763 throw std::runtime_error("Incompatible format: expected a double array!");
764
765 if (info.ndim != 2)
766 throw std::runtime_error("Incompatible buffer dimension!");
767
768 if (info.strides[0] == sizeof(double)) {
769 /* Buffer has the right layout -- directly copy. */
770 new (&m) Eigen::MatrixXd(info.shape[0], info.shape[1]);
771 memcpy(m.data(), info.ptr, sizeof(double) * m.size());
772 } else {
773 /* Oops -- the buffer is transposed */
774 new (&m) Eigen::MatrixXd(info.shape[1], info.shape[0]);
775 memcpy(m.data(), info.ptr, sizeof(double) * m.size());
776 m.transposeInPlace();
777 }
778 });
779
Wenzel Jakob93296692015-10-13 23:21:54 +0200780.. seealso::
781
782 The file :file:`example/example7.cpp` contains a complete example that
783 demonstrates using the buffer protocol with pybind11 in more detail.
784
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200785NumPy support
786=============
787
788By exchanging ``py::buffer`` with ``py::array`` in the above snippet, we can
789restrict the function so that it only accepts NumPy arrays (rather than any
790type of Python object satisfying the buffer object protocol).
791
792In many situations, we want to define a function which only accepts a NumPy
Wenzel Jakob93296692015-10-13 23:21:54 +0200793array of a certain data type. This is possible via the ``py::array_t<T>``
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200794template. For instance, the following function requires the argument to be a
795dense array of doubles in C-style ordering.
796
797.. code-block:: cpp
798
Wenzel Jakob93296692015-10-13 23:21:54 +0200799 void f(py::array_t<double> array);
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200800
801When it is invoked with a different type (e.g. an integer), the binding code
802will attempt to cast the input into a NumPy array of the requested type.
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200803Note that this feature requires the ``pybind11/numpy.h`` header to be included.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200804
805Vectorizing functions
806=====================
807
808Suppose we want to bind a function with the following signature to Python so
809that it can process arbitrary NumPy array arguments (vectors, matrices, general
810N-D arrays) in addition to its normal arguments:
811
812.. code-block:: cpp
813
814 double my_func(int x, float y, double z);
815
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200816After including the ``pybind11/numpy.h`` header, this is extremely simple:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200817
818.. code-block:: cpp
819
820 m.def("vectorized_func", py::vectorize(my_func));
821
822Invoking the function like below causes 4 calls to be made to ``my_func`` with
823each of the the array elements. The result is returned as a NumPy array of type
824``numpy.dtype.float64``.
825
826.. code-block:: python
827
828 >>> x = np.array([[1, 3],[5, 7]])
829 >>> y = np.array([[2, 4],[6, 8]])
830 >>> z = 3
831 >>> result = vectorized_func(x, y, z)
832
833The scalar argument ``z`` is transparently replicated 4 times. The input
834arrays ``x`` and ``y`` are automatically converted into the right types (they
835are of type ``numpy.dtype.int64`` but need to be ``numpy.dtype.int32`` and
836``numpy.dtype.float32``, respectively)
837
838Sometimes we might want to explitly exclude an argument from the vectorization
839because it makes little sense to wrap it in a NumPy array. For instance,
840suppose the function signature was
841
842.. code-block:: cpp
843
844 double my_func(int x, float y, my_custom_type *z);
845
846This can be done with a stateful Lambda closure:
847
848.. code-block:: cpp
849
850 // Vectorize a lambda function with a capture object (e.g. to exclude some arguments from the vectorization)
851 m.def("vectorized_func",
Wenzel Jakob93296692015-10-13 23:21:54 +0200852 [](py::array_t<int> x, py::array_t<float> y, my_custom_type *z) {
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200853 auto stateful_closure = [z](int x, float y) { return my_func(x, y, z); };
854 return py::vectorize(stateful_closure)(x, y);
855 }
856 );
857
Wenzel Jakob61587162016-01-18 22:38:52 +0100858In cases where the computation is too complicated to be reduced to
859``vectorize``, it will be necessary to create and access the buffer contents
860manually. The following snippet contains a complete example that shows how this
861works (the code is somewhat contrived, since it could have been done more
862simply using ``vectorize``).
863
864.. code-block:: cpp
865
866 #include <pybind11/pybind11.h>
867 #include <pybind11/numpy.h>
868
869 namespace py = pybind11;
870
871 py::array_t<double> add_arrays(py::array_t<double> input1, py::array_t<double> input2) {
872 auto buf1 = input1.request(), buf2 = input2.request();
873
874 if (buf1.ndim != 1 || buf2.ndim != 1)
875 throw std::runtime_error("Number of dimensions must be one");
876
877 if (buf1.shape[0] != buf2.shape[0])
878 throw std::runtime_error("Input shapes must match");
879
880 auto result = py::array(py::buffer_info(
881 nullptr, /* Pointer to data (nullptr -> ask NumPy to allocate!) */
882 sizeof(double), /* Size of one item */
883 py::format_descriptor<double>::value(), /* Buffer format */
884 buf1.ndim, /* How many dimensions? */
885 { buf1.shape[0] }, /* Number of elements for each dimension */
886 { sizeof(double) } /* Strides for each dimension */
887 ));
888
889 auto buf3 = result.request();
890
891 double *ptr1 = (double *) buf1.ptr,
892 *ptr2 = (double *) buf2.ptr,
893 *ptr3 = (double *) buf3.ptr;
894
895 for (size_t idx = 0; idx < buf1.shape[0]; idx++)
896 ptr3[idx] = ptr1[idx] + ptr2[idx];
897
898 return result;
899 }
900
901 PYBIND11_PLUGIN(test) {
902 py::module m("test");
903 m.def("add_arrays", &add_arrays, "Add two NumPy arrays");
904 return m.ptr();
905 }
906
Wenzel Jakob93296692015-10-13 23:21:54 +0200907.. seealso::
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200908
Wenzel Jakob93296692015-10-13 23:21:54 +0200909 The file :file:`example/example10.cpp` contains a complete example that
910 demonstrates using :func:`vectorize` in more detail.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200911
Wenzel Jakob93296692015-10-13 23:21:54 +0200912Functions taking Python objects as arguments
913============================================
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200914
Wenzel Jakob93296692015-10-13 23:21:54 +0200915pybind11 exposes all major Python types using thin C++ wrapper classes. These
916wrapper classes can also be used as parameters of functions in bindings, which
917makes it possible to directly work with native Python types on the C++ side.
918For instance, the following statement iterates over a Python ``dict``:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200919
Wenzel Jakob93296692015-10-13 23:21:54 +0200920.. code-block:: cpp
921
922 void print_dict(py::dict dict) {
923 /* Easily interact with Python types */
924 for (auto item : dict)
925 std::cout << "key=" << item.first << ", "
926 << "value=" << item.second << std::endl;
927 }
928
929Available types include :class:`handle`, :class:`object`, :class:`bool_`,
Wenzel Jakob27e8e102016-01-17 22:36:37 +0100930:class:`int_`, :class:`float_`, :class:`str`, :class:`bytes`, :class:`tuple`,
931:class:`list`, :class:`dict`, :class:`slice`, :class:`capsule`,
932:class:`function`, :class:`buffer`, :class:`array`, and :class:`array_t`.
Wenzel Jakob93296692015-10-13 23:21:54 +0200933
Wenzel Jakob436b7312015-10-20 01:04:30 +0200934In this kind of mixed code, it is often necessary to convert arbitrary C++
935types to Python, which can be done using :func:`cast`:
936
937.. code-block:: cpp
938
939 MyClass *cls = ..;
940 py::object obj = py::cast(cls);
941
942The reverse direction uses the following syntax:
943
944.. code-block:: cpp
945
946 py::object obj = ...;
947 MyClass *cls = obj.cast<MyClass *>();
948
949When conversion fails, both directions throw the exception :class:`cast_error`.
950
Wenzel Jakob93296692015-10-13 23:21:54 +0200951.. seealso::
952
953 The file :file:`example/example2.cpp` contains a complete example that
954 demonstrates passing native Python types in more detail.
Wenzel Jakob2ac50442016-01-17 22:36:35 +0100955
956Default arguments revisited
957===========================
958
959The section on :ref:`default_args` previously discussed basic usage of default
960arguments using pybind11. One noteworthy aspect of their implementation is that
961default arguments are converted to Python objects right at declaration time.
962Consider the following example:
963
964.. code-block:: cpp
965
966 py::class_<MyClass>("MyClass")
967 .def("myFunction", py::arg("arg") = SomeType(123));
968
969In this case, pybind11 must already be set up to deal with values of the type
970``SomeType`` (via a prior instantiation of ``py::class_<SomeType>``), or an
971exception will be thrown.
972
973Another aspect worth highlighting is that the "preview" of the default argument
974in the function signature is generated using the object's ``__repr__`` method.
975If not available, the signature may not be very helpful, e.g.:
976
977.. code-block:: python
978
979 FUNCTIONS
980 ...
981 | myFunction(...)
Wenzel Jakob48548ea2016-01-17 22:36:44 +0100982 | Signature : (MyClass, arg : SomeType = <SomeType object at 0x101b7b080>) -> NoneType
Wenzel Jakob2ac50442016-01-17 22:36:35 +0100983 ...
984
985The first way of addressing this is by defining ``SomeType.__repr__``.
986Alternatively, it is possible to specify the human-readable preview of the
987default argument manually using the ``arg_t`` notation:
988
989.. code-block:: cpp
990
991 py::class_<MyClass>("MyClass")
992 .def("myFunction", py::arg_t<SomeType>("arg", SomeType(123), "SomeType(123)"));
993
Wenzel Jakob2dfbade2016-01-17 22:36:37 +0100994Partitioning code over multiple extension modules
995=================================================
996
997It's straightforward to split binding code over multiple extension modules and
998reference types declared elsewhere. Everything "just" works without any special
999precautions. One exception to this rule occurs when wanting to extend a type declared
1000in another extension module. Recall the basic example from Section
1001:ref:`inheritance`.
1002
1003.. code-block:: cpp
1004
1005 py::class_<Pet> pet(m, "Pet");
1006 pet.def(py::init<const std::string &>())
1007 .def_readwrite("name", &Pet::name);
1008
1009 py::class_<Dog>(m, "Dog", pet /* <- specify parent */)
1010 .def(py::init<const std::string &>())
1011 .def("bark", &Dog::bark);
1012
1013Suppose now that ``Pet`` bindings are defined in a module named ``basic``,
1014whereas the ``Dog`` bindings are defined somewhere else. The challenge is of
1015course that the variable ``pet`` is not available anymore though it is needed
1016to indicate the inheritance relationship to the constructor of ``class_<Dog>``.
1017However, it can be acquired as follows:
1018
1019.. code-block:: cpp
1020
1021 py::object pet = (py::object) py::module::import("basic").attr("Pet");
1022
1023 py::class_<Dog>(m, "Dog", pet)
1024 .def(py::init<const std::string &>())
1025 .def("bark", &Dog::bark);
1026