blob: 4353536f02ba1e6526f83630231e67d98ebd45ef [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
105 The file :file:`example/example3.cpp` contains a complete example that
106 demonstrates how to work with overloaded operators in more detail.
107
108Callbacks and passing anonymous functions
109=========================================
110
111The C++11 standard brought lambda functions and the generic polymorphic
112function wrapper ``std::function<>`` to the C++ programming language, which
113enable powerful new ways of working with functions. Lambda functions come in
114two flavors: stateless lambda function resemble classic function pointers that
115link to an anonymous piece of code, while stateful lambda functions
116additionally depend on captured variables that are stored in an anonymous
117*lambda closure object*.
118
119Here is a simple example of a C++ function that takes an arbitrary function
120(stateful or stateless) with signature ``int -> int`` as an argument and runs
121it with the value 10.
122
123.. code-block:: cpp
124
125 int func_arg(const std::function<int(int)> &f) {
126 return f(10);
127 }
128
129The example below is more involved: it takes a function of signature ``int -> int``
130and returns another function of the same kind. The return value is a stateful
131lambda function, which stores the value ``f`` in the capture object and adds 1 to
132its return value upon execution.
133
134.. code-block:: cpp
135
136 std::function<int(int)> func_ret(const std::function<int(int)> &f) {
137 return [f](int i) {
138 return f(i) + 1;
139 };
140 }
141
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200142After including the extra header file :file:`pybind11/functional.h`, it is almost
Wenzel Jakob93296692015-10-13 23:21:54 +0200143trivial to generate binding code for both of these functions.
144
145.. code-block:: cpp
146
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200147 #include <pybind11/functional.h>
Wenzel Jakob93296692015-10-13 23:21:54 +0200148
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200149 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200150 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200151
152 m.def("func_arg", &func_arg);
153 m.def("func_ret", &func_ret);
154
155 return m.ptr();
156 }
157
158The following interactive session shows how to call them from Python.
159
160.. code-block:: python
161
162 $ python
163 >>> import example
164 >>> def square(i):
165 ... return i * i
166 ...
167 >>> example.func_arg(square)
168 100L
169 >>> square_plus_1 = example.func_ret(square)
170 >>> square_plus_1(4)
171 17L
172 >>>
173
174.. note::
175
176 This functionality is very useful when generating bindings for callbacks in
177 C++ libraries (e.g. a graphical user interface library).
178
179 The file :file:`example/example5.cpp` contains a complete example that
180 demonstrates how to work with callbacks and anonymous functions in more detail.
181
Wenzel Jakoba4175d62015-11-17 08:30:34 +0100182.. warning::
183
184 Keep in mind that passing a function from C++ to Python (or vice versa)
185 will instantiate a piece of wrapper code that translates function
186 invocations between the two languages. Copying the same function back and
187 forth between Python and C++ many times in a row will cause these wrappers
188 to accumulate, which can decrease performance.
189
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200190Overriding virtual functions in Python
191======================================
192
Wenzel Jakob93296692015-10-13 23:21:54 +0200193Suppose that a C++ class or interface has a virtual function that we'd like to
194to override from within Python (we'll focus on the class ``Animal``; ``Dog`` is
195given as a specific example of how one would do this with traditional C++
196code).
197
198.. code-block:: cpp
199
200 class Animal {
201 public:
202 virtual ~Animal() { }
203 virtual std::string go(int n_times) = 0;
204 };
205
206 class Dog : public Animal {
207 public:
208 std::string go(int n_times) {
209 std::string result;
210 for (int i=0; i<n_times; ++i)
211 result += "woof! ";
212 return result;
213 }
214 };
215
216Let's also suppose that we are given a plain function which calls the
217function ``go()`` on an arbitrary ``Animal`` instance.
218
219.. code-block:: cpp
220
221 std::string call_go(Animal *animal) {
222 return animal->go(3);
223 }
224
225Normally, the binding code for these classes would look as follows:
226
227.. code-block:: cpp
228
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200229 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200230 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200231
232 py::class_<Animal> animal(m, "Animal");
233 animal
234 .def("go", &Animal::go);
235
236 py::class_<Dog>(m, "Dog", animal)
237 .def(py::init<>());
238
239 m.def("call_go", &call_go);
240
241 return m.ptr();
242 }
243
244However, these bindings are impossible to extend: ``Animal`` is not
245constructible, and we clearly require some kind of "trampoline" that
246redirects virtual calls back to Python.
247
248Defining a new type of ``Animal`` from within Python is possible but requires a
249helper class that is defined as follows:
250
251.. code-block:: cpp
252
253 class PyAnimal : public Animal {
254 public:
255 /* Inherit the constructors */
256 using Animal::Animal;
257
258 /* Trampoline (need one for each virtual function) */
259 std::string go(int n_times) {
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200260 PYBIND11_OVERLOAD_PURE(
Wenzel Jakob93296692015-10-13 23:21:54 +0200261 std::string, /* Return type */
262 Animal, /* Parent class */
263 go, /* Name of function */
264 n_times /* Argument(s) */
265 );
266 }
267 };
268
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200269The macro :func:`PYBIND11_OVERLOAD_PURE` should be used for pure virtual
270functions, and :func:`PYBIND11_OVERLOAD` should be used for functions which have
Wenzel Jakob93296692015-10-13 23:21:54 +0200271a default implementation. The binding code also needs a few minor adaptations
272(highlighted):
273
274.. code-block:: cpp
275 :emphasize-lines: 4,6,7
276
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200277 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200278 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200279
280 py::class_<PyAnimal> animal(m, "Animal");
281 animal
282 .alias<Animal>()
283 .def(py::init<>())
284 .def("go", &Animal::go);
285
286 py::class_<Dog>(m, "Dog", animal)
287 .def(py::init<>());
288
289 m.def("call_go", &call_go);
290
291 return m.ptr();
292 }
293
294Importantly, the trampoline helper class is used as the template argument to
295:class:`class_`, and a call to :func:`class_::alias` informs the binding
296generator that this is merely an alias for the underlying type ``Animal``.
297Following this, we are able to define a constructor as usual.
298
299The Python session below shows how to override ``Animal::go`` and invoke it via
300a virtual method call.
301
Wenzel Jakobde3ad072016-02-02 11:38:21 +0100302.. code-block:: python
Wenzel Jakob93296692015-10-13 23:21:54 +0200303
304 >>> from example import *
305 >>> d = Dog()
306 >>> call_go(d)
307 u'woof! woof! woof! '
308 >>> class Cat(Animal):
309 ... def go(self, n_times):
310 ... return "meow! " * n_times
311 ...
312 >>> c = Cat()
313 >>> call_go(c)
314 u'meow! meow! meow! '
315
Wenzel Jakobbd986fe2016-05-21 10:48:30 +0200316.. warning::
317
318 Both :func:`PYBIND11_OVERLOAD` and :func:`PYBIND11_OVERLOAD_PURE` are
319 macros, which means that they can get confused by commas in a template
320 argument such as ``PYBIND11_OVERLOAD(MyReturnValue<T1, T2>, myFunc)``. In
321 this case, the preprocessor assumes that the comma indicates the beginnning
322 of the next parameter. Use a ``typedef`` to bind the template to another
323 name and use it in the macro to avoid this problem.
324
Wenzel Jakob93296692015-10-13 23:21:54 +0200325.. seealso::
326
327 The file :file:`example/example12.cpp` contains a complete example that
328 demonstrates how to override virtual functions using pybind11 in more
329 detail.
330
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100331
332Global Interpreter Lock (GIL)
333=============================
334
335The classes :class:`gil_scoped_release` and :class:`gil_scoped_acquire` can be
336used to acquire and release the global interpreter lock in the body of a C++
337function call. In this way, long-running C++ code can be parallelized using
338multiple Python threads. Taking the previous section as an example, this could
339be realized as follows (important changes highlighted):
340
341.. code-block:: cpp
342 :emphasize-lines: 8,9,33,34
343
344 class PyAnimal : public Animal {
345 public:
346 /* Inherit the constructors */
347 using Animal::Animal;
348
349 /* Trampoline (need one for each virtual function) */
350 std::string go(int n_times) {
351 /* Acquire GIL before calling Python code */
Wenzel Jakoba4caa852015-12-14 12:39:02 +0100352 py::gil_scoped_acquire acquire;
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100353
354 PYBIND11_OVERLOAD_PURE(
355 std::string, /* Return type */
356 Animal, /* Parent class */
357 go, /* Name of function */
358 n_times /* Argument(s) */
359 );
360 }
361 };
362
363 PYBIND11_PLUGIN(example) {
364 py::module m("example", "pybind11 example plugin");
365
366 py::class_<PyAnimal> animal(m, "Animal");
367 animal
368 .alias<Animal>()
369 .def(py::init<>())
370 .def("go", &Animal::go);
371
372 py::class_<Dog>(m, "Dog", animal)
373 .def(py::init<>());
374
375 m.def("call_go", [](Animal *animal) -> std::string {
376 /* Release GIL before calling into (potentially long-running) C++ code */
Wenzel Jakoba4caa852015-12-14 12:39:02 +0100377 py::gil_scoped_release release;
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100378 return call_go(animal);
379 });
380
381 return m.ptr();
382 }
383
Wenzel Jakob93296692015-10-13 23:21:54 +0200384Passing STL data structures
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200385===========================
386
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200387When including the additional header file :file:`pybind11/stl.h`, conversions
Wenzel Jakob978e3762016-04-07 18:00:41 +0200388between ``std::vector<>``, ``std::list<>``, ``std::set<>``, and ``std::map<>``
389and the Python ``list``, ``set`` and ``dict`` data structures are automatically
390enabled. The types ``std::pair<>`` and ``std::tuple<>`` are already supported
391out of the box with just the core :file:`pybind11/pybind11.h` header.
Wenzel Jakob93296692015-10-13 23:21:54 +0200392
393.. note::
394
Wenzel Jakob44db04f2015-12-14 12:40:45 +0100395 Arbitrary nesting of any of these types is supported.
Wenzel Jakob93296692015-10-13 23:21:54 +0200396
397.. seealso::
398
399 The file :file:`example/example2.cpp` contains a complete example that
400 demonstrates how to pass STL data types in more detail.
401
Wenzel Jakobb2825952016-04-13 23:33:00 +0200402Binding sequence data types, iterators, the slicing protocol, etc.
403==================================================================
Wenzel Jakob93296692015-10-13 23:21:54 +0200404
405Please refer to the supplemental example for details.
406
407.. seealso::
408
409 The file :file:`example/example6.cpp` contains a complete example that
410 shows how to bind a sequence data type, including length queries
411 (``__len__``), iterators (``__iter__``), the slicing protocol and other
412 kinds of useful operations.
413
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200414Return value policies
415=====================
416
Wenzel Jakob93296692015-10-13 23:21:54 +0200417Python and C++ use wildly different ways of managing the memory and lifetime of
418objects managed by them. This can lead to issues when creating bindings for
419functions that return a non-trivial type. Just by looking at the type
420information, it is not clear whether Python should take charge of the returned
421value and eventually free its resources, or if this is handled on the C++ side.
422For this reason, pybind11 provides a several `return value policy` annotations
423that can be passed to the :func:`module::def` and :func:`class_::def`
Wenzel Jakob61d67f02015-12-14 12:53:06 +0100424functions. The default policy is :enum:`return_value_policy::automatic`.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200425
Wenzel Jakobf64feaf2016-04-28 14:33:45 +0200426.. tabularcolumns:: |p{0.5\textwidth}|p{0.45\textwidth}|
427
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200428+--------------------------------------------------+----------------------------------------------------------------------------+
429| Return value policy | Description |
430+==================================================+============================================================================+
431| :enum:`return_value_policy::automatic` | This is the default return value policy, which falls back to the policy |
432| | :enum:`return_value_policy::take_ownership` when the return value is a |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200433| | pointer. Otherwise, it uses :enum:`return_value::move` or |
434| | :enum:`return_value::copy` for rvalue and lvalue references, respectively. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200435| | See below for a description of what all of these different policies do. |
436+--------------------------------------------------+----------------------------------------------------------------------------+
437| :enum:`return_value_policy::automatic_reference` | As above, but use policy :enum:`return_value_policy::reference` when the |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200438| | return value is a pointer. You probably won't need to use this. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200439+--------------------------------------------------+----------------------------------------------------------------------------+
440| :enum:`return_value_policy::take_ownership` | Reference an existing object (i.e. do not create a new copy) and take |
441| | ownership. Python will call the destructor and delete operator when the |
442| | object's reference count reaches zero. Undefined behavior ensues when the |
443| | C++ side does the same.. |
444+--------------------------------------------------+----------------------------------------------------------------------------+
445| :enum:`return_value_policy::copy` | Create a new copy of the returned object, which will be owned by Python. |
446| | This policy is comparably safe because the lifetimes of the two instances |
447| | are decoupled. |
448+--------------------------------------------------+----------------------------------------------------------------------------+
449| :enum:`return_value_policy::move` | Use ``std::move`` to move the return value contents into a new instance |
450| | that will be owned by Python. This policy is comparably safe because the |
451| | lifetimes of the two instances (move source and destination) are decoupled.|
452+--------------------------------------------------+----------------------------------------------------------------------------+
453| :enum:`return_value_policy::reference` | Reference an existing object, but do not take ownership. The C++ side is |
454| | responsible for managing the object's lifetime and deallocating it when |
455| | it is no longer used. Warning: undefined behavior will ensue when the C++ |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200456| | side deletes an object that is still referenced and used by Python. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200457+--------------------------------------------------+----------------------------------------------------------------------------+
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200458| :enum:`return_value_policy::reference_internal` | This policy only applies to methods and properties. It references the |
459| | object without taking ownership similar to the above |
460| | :enum:`return_value_policy::reference` policy. In contrast to that policy, |
461| | the function or property's implicit ``this`` argument (called the *parent*)|
462| | is considered to be the the owner of the return value (the *child*). |
463| | pybind11 then couples the lifetime of the parent to the child via a |
464| | reference relationship that ensures that the parent cannot be garbage |
465| | collected while Python is still using the child. More advanced variations |
466| | of this scheme are also possible using combinations of |
467| | :enum:`return_value_policy::reference` and the :class:`keep_alive` call |
468| | policy described next. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200469+--------------------------------------------------+----------------------------------------------------------------------------+
Wenzel Jakob93296692015-10-13 23:21:54 +0200470
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200471The following example snippet shows a use case of the
Wenzel Jakob93296692015-10-13 23:21:54 +0200472:enum:`return_value_policy::reference_internal` policy.
473
474.. code-block:: cpp
475
476 class Example {
477 public:
478 Internal &get_internal() { return internal; }
479 private:
480 Internal internal;
481 };
482
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200483 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200484 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200485
486 py::class_<Example>(m, "Example")
487 .def(py::init<>())
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200488 .def("get_internal", &Example::get_internal, "Return the internal data",
489 py::return_value_policy::reference_internal);
Wenzel Jakob93296692015-10-13 23:21:54 +0200490
491 return m.ptr();
492 }
493
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200494.. warning::
495
496 Code with invalid call policies might access unitialized memory or free
497 data structures multiple times, which can lead to hard-to-debug
498 non-determinism and segmentation faults, hence it is worth spending the
499 time to understand all the different options in the table above.
500
501.. note::
502
503 The next section on :ref:`call_policies` discusses *call policies* that can be
504 specified *in addition* to a return value policy from the list above. Call
505 policies indicate reference relationships that can involve both return values
506 and parameters of functions.
507
508.. note::
509
510 As an alternative to elaborate call policies and lifetime management logic,
511 consider using smart pointers (see the section on :ref:`smart_pointers` for
512 details). Smart pointers can tell whether an object is still referenced from
513 C++ or Python, which generally eliminates the kinds of inconsistencies that
514 can lead to crashes or undefined behavior. For functions returning smart
515 pointers, it is not necessary to specify a return value policy.
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100516
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200517.. _call_policies:
518
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100519Additional call policies
520========================
521
522In addition to the above return value policies, further `call policies` can be
523specified to indicate dependencies between parameters. There is currently just
524one policy named ``keep_alive<Nurse, Patient>``, which indicates that the
525argument with index ``Patient`` should be kept alive at least until the
526argument with index ``Nurse`` is freed by the garbage collector; argument
Wenzel Jakob8e93df82016-05-01 02:36:58 +0200527indices start at one, while zero refers to the return value. For methods, index
528one refers to the implicit ``this`` pointer, while regular arguments begin at
529index two. Arbitrarily many call policies can be specified.
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100530
Wenzel Jakob8e93df82016-05-01 02:36:58 +0200531Consider the following example: the binding code for a list append operation
532that ties the lifetime of the newly added element to the underlying container
533might be declared as follows:
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100534
535.. code-block:: cpp
536
537 py::class_<List>(m, "List")
538 .def("append", &List::append, py::keep_alive<1, 2>());
539
540.. note::
541
542 ``keep_alive`` is analogous to the ``with_custodian_and_ward`` (if Nurse,
543 Patient != 0) and ``with_custodian_and_ward_postcall`` (if Nurse/Patient ==
544 0) policies from Boost.Python.
545
Wenzel Jakob61587162016-01-18 22:38:52 +0100546.. seealso::
547
548 The file :file:`example/example13.cpp` contains a complete example that
549 demonstrates using :class:`keep_alive` in more detail.
550
Wenzel Jakob93296692015-10-13 23:21:54 +0200551Implicit type conversions
552=========================
553
554Suppose that instances of two types ``A`` and ``B`` are used in a project, and
Wenzel Jakob8e93df82016-05-01 02:36:58 +0200555that an ``A`` can easily be converted into an instance of type ``B`` (examples of this
Wenzel Jakob93296692015-10-13 23:21:54 +0200556could be a fixed and an arbitrary precision number type).
557
558.. code-block:: cpp
559
560 py::class_<A>(m, "A")
561 /// ... members ...
562
563 py::class_<B>(m, "B")
564 .def(py::init<A>())
565 /// ... members ...
566
567 m.def("func",
568 [](const B &) { /* .... */ }
569 );
570
571To invoke the function ``func`` using a variable ``a`` containing an ``A``
572instance, we'd have to write ``func(B(a))`` in Python. On the other hand, C++
573will automatically apply an implicit type conversion, which makes it possible
574to directly write ``func(a)``.
575
576In this situation (i.e. where ``B`` has a constructor that converts from
577``A``), the following statement enables similar implicit conversions on the
578Python side:
579
580.. code-block:: cpp
581
582 py::implicitly_convertible<A, B>();
583
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200584Unique pointers
585===============
586
587Given a class ``Example`` with Python bindings, it's possible to return
588instances wrapped in C++11 unique pointers, like so
589
590.. code-block:: cpp
591
592 std::unique_ptr<Example> create_example() { return std::unique_ptr<Example>(new Example()); }
593
594.. code-block:: cpp
595
596 m.def("create_example", &create_example);
597
598In other words, there is nothing special that needs to be done. While returning
599unique pointers in this way is allowed, it is *illegal* to use them as function
600arguments. For instance, the following function signature cannot be processed
601by pybind11.
602
603.. code-block:: cpp
604
605 void do_something_with_example(std::unique_ptr<Example> ex) { ... }
606
607The above signature would imply that Python needs to give up ownership of an
608object that is passed to this function, which is generally not possible (for
609instance, the object might be referenced elsewhere).
610
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200611.. _smart_pointers:
612
Wenzel Jakob93296692015-10-13 23:21:54 +0200613Smart pointers
614==============
615
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200616This section explains how to pass values that are wrapped in "smart" pointer
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200617types with internal reference counting. For the simpler C++11 unique pointers,
618refer to the previous section.
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200619
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200620The binding generator for classes, :class:`class_`, takes an optional second
Wenzel Jakob93296692015-10-13 23:21:54 +0200621template type, which denotes a special *holder* type that is used to manage
622references to the object. When wrapping a type named ``Type``, the default
623value of this template parameter is ``std::unique_ptr<Type>``, which means that
624the object is deallocated when Python's reference count goes to zero.
625
Wenzel Jakob1853b652015-10-18 15:38:50 +0200626It is possible to switch to other types of reference counting wrappers or smart
627pointers, which is useful in codebases that rely on them. For instance, the
628following snippet causes ``std::shared_ptr`` to be used instead.
Wenzel Jakob93296692015-10-13 23:21:54 +0200629
630.. code-block:: cpp
631
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100632 py::class_<Example, std::shared_ptr<Example> /* <- holder type */> obj(m, "Example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100633
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100634Note that any particular class can only be associated with a single holder type.
Wenzel Jakob93296692015-10-13 23:21:54 +0200635
Wenzel Jakob1853b652015-10-18 15:38:50 +0200636To enable transparent conversions for functions that take shared pointers as an
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100637argument or that return them, a macro invocation similar to the following must
Wenzel Jakob1853b652015-10-18 15:38:50 +0200638be declared at the top level before any binding code:
639
640.. code-block:: cpp
641
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200642 PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr<T>);
Wenzel Jakob1853b652015-10-18 15:38:50 +0200643
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100644.. note::
Wenzel Jakob61d67f02015-12-14 12:53:06 +0100645
646 The first argument of :func:`PYBIND11_DECLARE_HOLDER_TYPE` should be a
647 placeholder name that is used as a template parameter of the second
648 argument. Thus, feel free to use any identifier, but use it consistently on
649 both sides; also, don't use the name of a type that already exists in your
650 codebase.
651
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100652One potential stumbling block when using holder types is that they need to be
653applied consistently. Can you guess what's broken about the following binding
654code?
Wenzel Jakob6e213c92015-11-24 23:05:58 +0100655
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100656.. code-block:: cpp
Wenzel Jakob6e213c92015-11-24 23:05:58 +0100657
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100658 class Child { };
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100659
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100660 class Parent {
661 public:
662 Parent() : child(std::make_shared<Child>()) { }
663 Child *get_child() { return child.get(); } /* Hint: ** DON'T DO THIS ** */
664 private:
665 std::shared_ptr<Child> child;
666 };
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100667
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100668 PYBIND11_PLUGIN(example) {
669 py::module m("example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100670
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100671 py::class_<Child, std::shared_ptr<Child>>(m, "Child");
672
673 py::class_<Parent, std::shared_ptr<Parent>>(m, "Parent")
674 .def(py::init<>())
675 .def("get_child", &Parent::get_child);
676
677 return m.ptr();
678 }
679
680The following Python code will cause undefined behavior (and likely a
681segmentation fault).
682
683.. code-block:: python
684
685 from example import Parent
686 print(Parent().get_child())
687
688The problem is that ``Parent::get_child()`` returns a pointer to an instance of
689``Child``, but the fact that this instance is already managed by
690``std::shared_ptr<...>`` is lost when passing raw pointers. In this case,
691pybind11 will create a second independent ``std::shared_ptr<...>`` that also
692claims ownership of the pointer. In the end, the object will be freed **twice**
693since these shared pointers have no way of knowing about each other.
694
695There are two ways to resolve this issue:
696
6971. For types that are managed by a smart pointer class, never use raw pointers
698 in function arguments or return values. In other words: always consistently
699 wrap pointers into their designated holder types (such as
700 ``std::shared_ptr<...>``). In this case, the signature of ``get_child()``
701 should be modified as follows:
702
703.. code-block:: cpp
704
705 std::shared_ptr<Child> get_child() { return child; }
706
7072. Adjust the definition of ``Child`` by specifying
708 ``std::enable_shared_from_this<T>`` (see cppreference_ for details) as a
709 base class. This adds a small bit of information to ``Child`` that allows
710 pybind11 to realize that there is already an existing
711 ``std::shared_ptr<...>`` and communicate with it. In this case, the
712 declaration of ``Child`` should look as follows:
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100713
Wenzel Jakob6e213c92015-11-24 23:05:58 +0100714.. _cppreference: http://en.cppreference.com/w/cpp/memory/enable_shared_from_this
715
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100716.. code-block:: cpp
717
718 class Child : public std::enable_shared_from_this<Child> { };
719
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100720.. seealso::
721
722 The file :file:`example/example8.cpp` contains a complete example that
723 demonstrates how to work with custom reference-counting holder types in
724 more detail.
725
Wenzel Jakob93296692015-10-13 23:21:54 +0200726.. _custom_constructors:
727
728Custom constructors
729===================
730
731The syntax for binding constructors was previously introduced, but it only
732works when a constructor with the given parameters actually exists on the C++
733side. To extend this to more general cases, let's take a look at what actually
734happens under the hood: the following statement
735
736.. code-block:: cpp
737
738 py::class_<Example>(m, "Example")
739 .def(py::init<int>());
740
741is short hand notation for
742
743.. code-block:: cpp
744
745 py::class_<Example>(m, "Example")
746 .def("__init__",
747 [](Example &instance, int arg) {
748 new (&instance) Example(arg);
749 }
750 );
751
752In other words, :func:`init` creates an anonymous function that invokes an
753in-place constructor. Memory allocation etc. is already take care of beforehand
754within pybind11.
755
756Catching and throwing exceptions
757================================
758
759When C++ code invoked from Python throws an ``std::exception``, it is
760automatically converted into a Python ``Exception``. pybind11 defines multiple
761special exception classes that will map to different types of Python
762exceptions:
763
Wenzel Jakobf64feaf2016-04-28 14:33:45 +0200764.. tabularcolumns:: |p{0.5\textwidth}|p{0.45\textwidth}|
765
Wenzel Jakob978e3762016-04-07 18:00:41 +0200766+--------------------------------------+------------------------------+
767| C++ exception type | Python exception type |
768+======================================+==============================+
769| :class:`std::exception` | ``RuntimeError`` |
770+--------------------------------------+------------------------------+
771| :class:`std::bad_alloc` | ``MemoryError`` |
772+--------------------------------------+------------------------------+
773| :class:`std::domain_error` | ``ValueError`` |
774+--------------------------------------+------------------------------+
775| :class:`std::invalid_argument` | ``ValueError`` |
776+--------------------------------------+------------------------------+
777| :class:`std::length_error` | ``ValueError`` |
778+--------------------------------------+------------------------------+
779| :class:`std::out_of_range` | ``ValueError`` |
780+--------------------------------------+------------------------------+
781| :class:`std::range_error` | ``ValueError`` |
782+--------------------------------------+------------------------------+
783| :class:`pybind11::stop_iteration` | ``StopIteration`` (used to |
784| | implement custom iterators) |
785+--------------------------------------+------------------------------+
786| :class:`pybind11::index_error` | ``IndexError`` (used to |
787| | indicate out of bounds |
788| | accesses in ``__getitem__``, |
789| | ``__setitem__``, etc.) |
790+--------------------------------------+------------------------------+
Sergey Lyskova95bde12016-05-08 19:31:55 -0400791| :class:`pybind11::value_error` | ``ValueError`` (used to |
792| | indicate wrong value passed |
793| | in ``container.remove(...)`` |
794+--------------------------------------+------------------------------+
Wenzel Jakob978e3762016-04-07 18:00:41 +0200795| :class:`pybind11::error_already_set` | Indicates that the Python |
796| | exception flag has already |
797| | been initialized |
798+--------------------------------------+------------------------------+
Wenzel Jakob93296692015-10-13 23:21:54 +0200799
800When a Python function invoked from C++ throws an exception, it is converted
801into a C++ exception of type :class:`error_already_set` whose string payload
802contains a textual summary.
803
804There is also a special exception :class:`cast_error` that is thrown by
805:func:`handle::call` when the input arguments cannot be converted to Python
806objects.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200807
Wenzel Jakob9e0a0562016-05-05 20:33:54 +0200808.. _opaque:
809
810Treating STL data structures as opaque objects
811==============================================
812
813pybind11 heavily relies on a template matching mechanism to convert parameters
814and return values that are constructed from STL data types such as vectors,
815linked lists, hash tables, etc. This even works in a recursive manner, for
816instance to deal with lists of hash maps of pairs of elementary and custom
817types, etc.
818
819However, a fundamental limitation of this approach is that internal conversions
820between Python and C++ types involve a copy operation that prevents
821pass-by-reference semantics. What does this mean?
822
823Suppose we bind the following function
824
825.. code-block:: cpp
826
827 void append_1(std::vector<int> &v) {
828 v.push_back(1);
829 }
830
831and call it from Python, the following happens:
832
833.. code-block:: python
834
835 >>> v = [5, 6]
836 >>> append_1(v)
837 >>> print(v)
838 [5, 6]
839
840As you can see, when passing STL data structures by reference, modifications
841are not propagated back the Python side. A similar situation arises when
842exposing STL data structures using the ``def_readwrite`` or ``def_readonly``
843functions:
844
845.. code-block:: cpp
846
847 /* ... definition ... */
848
849 class MyClass {
850 std::vector<int> contents;
851 };
852
853 /* ... binding code ... */
854
855 py::class_<MyClass>(m, "MyClass")
856 .def(py::init<>)
857 .def_readwrite("contents", &MyClass::contents);
858
859In this case, properties can be read and written in their entirety. However, an
860``append`` operaton involving such a list type has no effect:
861
862.. code-block:: python
863
864 >>> m = MyClass()
865 >>> m.contents = [5, 6]
866 >>> print(m.contents)
867 [5, 6]
868 >>> m.contents.append(7)
869 >>> print(m.contents)
870 [5, 6]
871
872To deal with both of the above situations, pybind11 provides a macro named
873``PYBIND11_MAKE_OPAQUE(T)`` that disables the template-based conversion
874machinery of types, thus rendering them *opaque*. The contents of opaque
875objects are never inspected or extracted, hence they can be passed by
876reference. For instance, to turn ``std::vector<int>`` into an opaque type, add
877the declaration
878
879.. code-block:: cpp
880
881 PYBIND11_MAKE_OPAQUE(std::vector<int>);
882
883before any binding code (e.g. invocations to ``class_::def()``, etc.). This
884macro must be specified at the top level, since instantiates a partial template
885overload. If your binding code consists of multiple compilation units, it must
886be present in every file preceding any usage of ``std::vector<int>``. Opaque
887types must also have a corresponding ``class_`` declaration to associate them
888with a name in Python, and to define a set of available operations:
889
890.. code-block:: cpp
891
892 py::class_<std::vector<int>>(m, "IntVector")
893 .def(py::init<>())
894 .def("clear", &std::vector<int>::clear)
895 .def("pop_back", &std::vector<int>::pop_back)
896 .def("__len__", [](const std::vector<int> &v) { return v.size(); })
897 .def("__iter__", [](std::vector<int> &v) {
898 return py::make_iterator(v.begin(), v.end());
899 }, py::keep_alive<0, 1>()) /* Keep vector alive while iterator is used */
900 // ....
901
902
903.. seealso::
904
905 The file :file:`example/example14.cpp` contains a complete example that
906 demonstrates how to create and expose opaque types using pybind11 in more
907 detail.
908
909.. _eigen:
910
911Transparent conversion of dense and sparse Eigen data types
912===========================================================
913
914Eigen [#f1]_ is C++ header-based library for dense and sparse linear algebra. Due to
915its popularity and widespread adoption, pybind11 provides transparent
916conversion support between Eigen and Scientific Python linear algebra data types.
917
918Specifically, when including the optional header file :file:`pybind11/eigen.h`,
Wenzel Jakob178c8a82016-05-10 15:59:01 +0100919pybind11 will automatically and transparently convert
Wenzel Jakob9e0a0562016-05-05 20:33:54 +0200920
9211. Static and dynamic Eigen dense vectors and matrices to instances of
922 ``numpy.ndarray`` (and vice versa).
923
9241. Eigen sparse vectors and matrices to instances of
925 ``scipy.sparse.csr_matrix``/``scipy.sparse.csc_matrix`` (and vice versa).
926
927This makes it possible to bind most kinds of functions that rely on these types.
928One major caveat are functions that take Eigen matrices *by reference* and modify
929them somehow, in which case the information won't be propagated to the caller.
930
931.. code-block:: cpp
932
933 /* The Python bindings of this function won't replicate
934 the intended effect of modifying the function argument */
935 void scale_by_2(Eigen::Vector3f &v) {
936 v *= 2;
937 }
938
939To see why this is, refer to the section on :ref:`opaque` (although that
940section specifically covers STL data types, the underlying issue is the same).
941The next two sections discuss an efficient alternative for exposing the
942underlying native Eigen types as opaque objects in a way that still integrates
943with NumPy and SciPy.
944
945.. [#f1] http://eigen.tuxfamily.org
946
947.. seealso::
948
949 The file :file:`example/eigen.cpp` contains a complete example that
950 shows how to pass Eigen sparse and dense data types in more detail.
951
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200952Buffer protocol
953===============
954
955Python supports an extremely general and convenient approach for exchanging
Wenzel Jakob9e0a0562016-05-05 20:33:54 +0200956data between plugin libraries. Types can expose a buffer view [#f2]_, which
957provides fast direct access to the raw internal data representation. Suppose we
958want to bind the following simplistic Matrix class:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200959
960.. code-block:: cpp
961
962 class Matrix {
963 public:
964 Matrix(size_t rows, size_t cols) : m_rows(rows), m_cols(cols) {
965 m_data = new float[rows*cols];
966 }
967 float *data() { return m_data; }
968 size_t rows() const { return m_rows; }
969 size_t cols() const { return m_cols; }
970 private:
971 size_t m_rows, m_cols;
972 float *m_data;
973 };
974
975The following binding code exposes the ``Matrix`` contents as a buffer object,
Wenzel Jakob8e93df82016-05-01 02:36:58 +0200976making it possible to cast Matrices into NumPy arrays. It is even possible to
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200977completely avoid copy operations with Python expressions like
978``np.array(matrix_instance, copy = False)``.
979
980.. code-block:: cpp
981
982 py::class_<Matrix>(m, "Matrix")
983 .def_buffer([](Matrix &m) -> py::buffer_info {
984 return py::buffer_info(
Wenzel Jakob876eeab2016-05-04 22:22:48 +0200985 m.data(), /* Pointer to buffer */
986 sizeof(float), /* Size of one scalar */
987 py::format_descriptor<float>::value, /* Python struct-style format descriptor */
988 2, /* Number of dimensions */
989 { m.rows(), m.cols() }, /* Buffer dimensions */
990 { sizeof(float) * m.rows(), /* Strides (in bytes) for each index */
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200991 sizeof(float) }
992 );
993 });
994
995The snippet above binds a lambda function, which can create ``py::buffer_info``
996description records on demand describing a given matrix. The contents of
997``py::buffer_info`` mirror the Python buffer protocol specification.
998
999.. code-block:: cpp
1000
1001 struct buffer_info {
1002 void *ptr;
1003 size_t itemsize;
1004 std::string format;
1005 int ndim;
1006 std::vector<size_t> shape;
1007 std::vector<size_t> strides;
1008 };
1009
1010To create a C++ function that can take a Python buffer object as an argument,
1011simply use the type ``py::buffer`` as one of its arguments. Buffers can exist
1012in a great variety of configurations, hence some safety checks are usually
1013necessary in the function body. Below, you can see an basic example on how to
1014define a custom constructor for the Eigen double precision matrix
1015(``Eigen::MatrixXd``) type, which supports initialization from compatible
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001016buffer objects (e.g. a NumPy matrix).
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001017
1018.. code-block:: cpp
1019
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001020 /* Bind MatrixXd (or some other Eigen type) to Python */
1021 typedef Eigen::MatrixXd Matrix;
1022
1023 typedef Matrix::Scalar Scalar;
1024 constexpr bool rowMajor = Matrix::Flags & Eigen::RowMajorBit;
1025
1026 py::class_<Matrix>(m, "Matrix")
1027 .def("__init__", [](Matrix &m, py::buffer b) {
Wenzel Jakobe7628532016-05-05 10:04:44 +02001028 typedef Eigen::Stride<Eigen::Dynamic, Eigen::Dynamic> Strides;
Wenzel Jakobe7628532016-05-05 10:04:44 +02001029
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001030 /* Request a buffer descriptor from Python */
1031 py::buffer_info info = b.request();
1032
1033 /* Some sanity checks ... */
Wenzel Jakobe7628532016-05-05 10:04:44 +02001034 if (info.format != py::format_descriptor<Scalar>::value)
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001035 throw std::runtime_error("Incompatible format: expected a double array!");
1036
1037 if (info.ndim != 2)
1038 throw std::runtime_error("Incompatible buffer dimension!");
1039
Wenzel Jakobe7628532016-05-05 10:04:44 +02001040 auto strides = Strides(
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001041 info.strides[rowMajor ? 0 : 1] / sizeof(Scalar),
1042 info.strides[rowMajor ? 1 : 0] / sizeof(Scalar));
Wenzel Jakobe7628532016-05-05 10:04:44 +02001043
1044 auto map = Eigen::Map<Matrix, 0, Strides>(
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001045 static_cat<Scalar *>(info.ptr), info.shape[0], info.shape[1], strides);
Wenzel Jakobe7628532016-05-05 10:04:44 +02001046
1047 new (&m) Matrix(map);
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001048 });
1049
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001050For reference, the ``def_buffer()`` call for this Eigen data type should look
1051as follows:
1052
1053.. code-block:: cpp
1054
1055 .def_buffer([](Matrix &m) -> py::buffer_info {
1056 return py::buffer_info(
1057 m.data(), /* Pointer to buffer */
1058 sizeof(Scalar), /* Size of one scalar */
1059 /* Python struct-style format descriptor */
1060 py::format_descriptor<Scalar>::value,
1061 /* Number of dimensions */
1062 2,
1063 /* Buffer dimensions */
1064 { (size_t) m.rows(),
1065 (size_t) m.cols() },
1066 /* Strides (in bytes) for each index */
1067 { sizeof(Scalar) * (rowMajor ? m.cols() : 1),
1068 sizeof(Scalar) * (rowMajor ? 1 : m.rows()) }
1069 );
1070 })
1071
1072For a much easier approach of binding Eigen types (although with some
1073limitations), refer to the section on :ref:`eigen`.
1074
Wenzel Jakob93296692015-10-13 23:21:54 +02001075.. seealso::
1076
1077 The file :file:`example/example7.cpp` contains a complete example that
1078 demonstrates using the buffer protocol with pybind11 in more detail.
1079
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001080.. [#f2] http://docs.python.org/3/c-api/buffer.html
Wenzel Jakob978e3762016-04-07 18:00:41 +02001081
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001082NumPy support
1083=============
1084
1085By exchanging ``py::buffer`` with ``py::array`` in the above snippet, we can
1086restrict the function so that it only accepts NumPy arrays (rather than any
Wenzel Jakob978e3762016-04-07 18:00:41 +02001087type of Python object satisfying the buffer protocol).
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001088
1089In many situations, we want to define a function which only accepts a NumPy
Wenzel Jakob93296692015-10-13 23:21:54 +02001090array of a certain data type. This is possible via the ``py::array_t<T>``
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001091template. For instance, the following function requires the argument to be a
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001092NumPy array containing double precision values.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001093
1094.. code-block:: cpp
1095
Wenzel Jakob93296692015-10-13 23:21:54 +02001096 void f(py::array_t<double> array);
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001097
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001098When it is invoked with a different type (e.g. an integer or a list of
1099integers), the binding code will attempt to cast the input into a NumPy array
1100of the requested type. Note that this feature requires the
1101:file:``pybind11/numpy.h`` header to be included.
1102
1103Data in NumPy arrays is not guaranteed to packed in a dense manner;
1104furthermore, entries can be separated by arbitrary column and row strides.
1105Sometimes, it can be useful to require a function to only accept dense arrays
1106using either the C (row-major) or Fortran (column-major) ordering. This can be
1107accomplished via a second template argument with values ``py::array::c_style``
1108or ``py::array::f_style``.
1109
1110.. code-block:: cpp
1111
Wenzel Jakobb47a9de2016-05-19 16:02:09 +02001112 void f(py::array_t<double, py::array::c_style | py::array::forcecast> array);
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001113
Wenzel Jakobb47a9de2016-05-19 16:02:09 +02001114The ``py::array::forcecast`` argument is the default value of the second
1115template paramenter, and it ensures that non-conforming arguments are converted
1116into an array satisfying the specified requirements instead of trying the next
1117function overload.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001118
1119Vectorizing functions
1120=====================
1121
1122Suppose we want to bind a function with the following signature to Python so
1123that it can process arbitrary NumPy array arguments (vectors, matrices, general
1124N-D arrays) in addition to its normal arguments:
1125
1126.. code-block:: cpp
1127
1128 double my_func(int x, float y, double z);
1129
Wenzel Jakob8f4eb002015-10-15 18:13:33 +02001130After including the ``pybind11/numpy.h`` header, this is extremely simple:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001131
1132.. code-block:: cpp
1133
1134 m.def("vectorized_func", py::vectorize(my_func));
1135
1136Invoking the function like below causes 4 calls to be made to ``my_func`` with
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001137each of the array elements. The significant advantage of this compared to
Wenzel Jakob978e3762016-04-07 18:00:41 +02001138solutions like ``numpy.vectorize()`` is that the loop over the elements runs
1139entirely on the C++ side and can be crunched down into a tight, optimized loop
1140by the compiler. The result is returned as a NumPy array of type
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001141``numpy.dtype.float64``.
1142
1143.. code-block:: python
1144
1145 >>> x = np.array([[1, 3],[5, 7]])
1146 >>> y = np.array([[2, 4],[6, 8]])
1147 >>> z = 3
1148 >>> result = vectorized_func(x, y, z)
1149
1150The scalar argument ``z`` is transparently replicated 4 times. The input
1151arrays ``x`` and ``y`` are automatically converted into the right types (they
1152are of type ``numpy.dtype.int64`` but need to be ``numpy.dtype.int32`` and
1153``numpy.dtype.float32``, respectively)
1154
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001155Sometimes we might want to explicitly exclude an argument from the vectorization
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001156because it makes little sense to wrap it in a NumPy array. For instance,
1157suppose the function signature was
1158
1159.. code-block:: cpp
1160
1161 double my_func(int x, float y, my_custom_type *z);
1162
1163This can be done with a stateful Lambda closure:
1164
1165.. code-block:: cpp
1166
1167 // Vectorize a lambda function with a capture object (e.g. to exclude some arguments from the vectorization)
1168 m.def("vectorized_func",
Wenzel Jakob93296692015-10-13 23:21:54 +02001169 [](py::array_t<int> x, py::array_t<float> y, my_custom_type *z) {
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001170 auto stateful_closure = [z](int x, float y) { return my_func(x, y, z); };
1171 return py::vectorize(stateful_closure)(x, y);
1172 }
1173 );
1174
Wenzel Jakob61587162016-01-18 22:38:52 +01001175In cases where the computation is too complicated to be reduced to
1176``vectorize``, it will be necessary to create and access the buffer contents
1177manually. The following snippet contains a complete example that shows how this
1178works (the code is somewhat contrived, since it could have been done more
1179simply using ``vectorize``).
1180
1181.. code-block:: cpp
1182
1183 #include <pybind11/pybind11.h>
1184 #include <pybind11/numpy.h>
1185
1186 namespace py = pybind11;
1187
1188 py::array_t<double> add_arrays(py::array_t<double> input1, py::array_t<double> input2) {
1189 auto buf1 = input1.request(), buf2 = input2.request();
1190
1191 if (buf1.ndim != 1 || buf2.ndim != 1)
1192 throw std::runtime_error("Number of dimensions must be one");
1193
1194 if (buf1.shape[0] != buf2.shape[0])
1195 throw std::runtime_error("Input shapes must match");
1196
1197 auto result = py::array(py::buffer_info(
1198 nullptr, /* Pointer to data (nullptr -> ask NumPy to allocate!) */
1199 sizeof(double), /* Size of one item */
Nils Wernerf7048f22016-05-19 11:17:17 +02001200 py::format_descriptor<double>::value(), /* Buffer format */
Wenzel Jakob61587162016-01-18 22:38:52 +01001201 buf1.ndim, /* How many dimensions? */
1202 { buf1.shape[0] }, /* Number of elements for each dimension */
1203 { sizeof(double) } /* Strides for each dimension */
1204 ));
1205
1206 auto buf3 = result.request();
1207
1208 double *ptr1 = (double *) buf1.ptr,
1209 *ptr2 = (double *) buf2.ptr,
1210 *ptr3 = (double *) buf3.ptr;
1211
1212 for (size_t idx = 0; idx < buf1.shape[0]; idx++)
1213 ptr3[idx] = ptr1[idx] + ptr2[idx];
1214
1215 return result;
1216 }
1217
1218 PYBIND11_PLUGIN(test) {
1219 py::module m("test");
1220 m.def("add_arrays", &add_arrays, "Add two NumPy arrays");
1221 return m.ptr();
1222 }
1223
Wenzel Jakob93296692015-10-13 23:21:54 +02001224.. seealso::
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001225
Wenzel Jakob93296692015-10-13 23:21:54 +02001226 The file :file:`example/example10.cpp` contains a complete example that
1227 demonstrates using :func:`vectorize` in more detail.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001228
Wenzel Jakob93296692015-10-13 23:21:54 +02001229Functions taking Python objects as arguments
1230============================================
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001231
Wenzel Jakob93296692015-10-13 23:21:54 +02001232pybind11 exposes all major Python types using thin C++ wrapper classes. These
1233wrapper classes can also be used as parameters of functions in bindings, which
1234makes it possible to directly work with native Python types on the C++ side.
1235For instance, the following statement iterates over a Python ``dict``:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001236
Wenzel Jakob93296692015-10-13 23:21:54 +02001237.. code-block:: cpp
1238
1239 void print_dict(py::dict dict) {
1240 /* Easily interact with Python types */
1241 for (auto item : dict)
1242 std::cout << "key=" << item.first << ", "
1243 << "value=" << item.second << std::endl;
1244 }
1245
1246Available types include :class:`handle`, :class:`object`, :class:`bool_`,
Wenzel Jakob27e8e102016-01-17 22:36:37 +01001247:class:`int_`, :class:`float_`, :class:`str`, :class:`bytes`, :class:`tuple`,
Wenzel Jakobf64feaf2016-04-28 14:33:45 +02001248:class:`list`, :class:`dict`, :class:`slice`, :class:`none`, :class:`capsule`,
1249:class:`iterable`, :class:`iterator`, :class:`function`, :class:`buffer`,
1250:class:`array`, and :class:`array_t`.
Wenzel Jakob93296692015-10-13 23:21:54 +02001251
Wenzel Jakob436b7312015-10-20 01:04:30 +02001252In this kind of mixed code, it is often necessary to convert arbitrary C++
1253types to Python, which can be done using :func:`cast`:
1254
1255.. code-block:: cpp
1256
1257 MyClass *cls = ..;
1258 py::object obj = py::cast(cls);
1259
1260The reverse direction uses the following syntax:
1261
1262.. code-block:: cpp
1263
1264 py::object obj = ...;
1265 MyClass *cls = obj.cast<MyClass *>();
1266
1267When conversion fails, both directions throw the exception :class:`cast_error`.
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001268It is also possible to call python functions via ``operator()``.
1269
1270.. code-block:: cpp
1271
1272 py::function f = <...>;
1273 py::object result_py = f(1234, "hello", some_instance);
1274 MyClass &result = result_py.cast<MyClass>();
1275
1276The special ``f(*args)`` and ``f(*args, **kwargs)`` syntax is also supported to
1277supply arbitrary argument and keyword lists, although these cannot be mixed
1278with other parameters.
1279
1280.. code-block:: cpp
1281
1282 py::function f = <...>;
1283 py::tuple args = py::make_tuple(1234);
1284 py::dict kwargs;
1285 kwargs["y"] = py::cast(5678);
1286 py::object result = f(*args, **kwargs);
Wenzel Jakob436b7312015-10-20 01:04:30 +02001287
Wenzel Jakob93296692015-10-13 23:21:54 +02001288.. seealso::
1289
1290 The file :file:`example/example2.cpp` contains a complete example that
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001291 demonstrates passing native Python types in more detail. The file
1292 :file:`example/example11.cpp` discusses usage of ``args`` and ``kwargs``.
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001293
1294Default arguments revisited
1295===========================
1296
1297The section on :ref:`default_args` previously discussed basic usage of default
1298arguments using pybind11. One noteworthy aspect of their implementation is that
1299default arguments are converted to Python objects right at declaration time.
1300Consider the following example:
1301
1302.. code-block:: cpp
1303
1304 py::class_<MyClass>("MyClass")
1305 .def("myFunction", py::arg("arg") = SomeType(123));
1306
1307In this case, pybind11 must already be set up to deal with values of the type
1308``SomeType`` (via a prior instantiation of ``py::class_<SomeType>``), or an
1309exception will be thrown.
1310
1311Another aspect worth highlighting is that the "preview" of the default argument
1312in the function signature is generated using the object's ``__repr__`` method.
1313If not available, the signature may not be very helpful, e.g.:
1314
1315.. code-block:: python
1316
1317 FUNCTIONS
1318 ...
1319 | myFunction(...)
Wenzel Jakob48548ea2016-01-17 22:36:44 +01001320 | Signature : (MyClass, arg : SomeType = <SomeType object at 0x101b7b080>) -> NoneType
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001321 ...
1322
1323The first way of addressing this is by defining ``SomeType.__repr__``.
1324Alternatively, it is possible to specify the human-readable preview of the
1325default argument manually using the ``arg_t`` notation:
1326
1327.. code-block:: cpp
1328
1329 py::class_<MyClass>("MyClass")
1330 .def("myFunction", py::arg_t<SomeType>("arg", SomeType(123), "SomeType(123)"));
1331
Wenzel Jakobc769fce2016-03-03 12:03:30 +01001332Sometimes it may be necessary to pass a null pointer value as a default
1333argument. In this case, remember to cast it to the underlying type in question,
1334like so:
1335
1336.. code-block:: cpp
1337
1338 py::class_<MyClass>("MyClass")
1339 .def("myFunction", py::arg("arg") = (SomeType *) nullptr);
1340
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001341Binding functions that accept arbitrary numbers of arguments and keywords arguments
1342===================================================================================
1343
1344Python provides a useful mechanism to define functions that accept arbitrary
1345numbers of arguments and keyword arguments:
1346
1347.. code-block:: cpp
1348
1349 def generic(*args, **kwargs):
1350 # .. do something with args and kwargs
1351
1352Such functions can also be created using pybind11:
1353
1354.. code-block:: cpp
1355
1356 void generic(py::args args, py::kwargs kwargs) {
1357 /// .. do something with args
1358 if (kwargs)
1359 /// .. do something with kwargs
1360 }
1361
1362 /// Binding code
1363 m.def("generic", &generic);
1364
1365(See ``example/example11.cpp``). The class ``py::args`` derives from
1366``py::list`` and ``py::kwargs`` derives from ``py::dict`` Note that the
1367``kwargs`` argument is invalid if no keyword arguments were actually provided.
1368Please refer to the other examples for details on how to iterate over these,
1369and on how to cast their entries into C++ objects.
1370
Wenzel Jakob2dfbade2016-01-17 22:36:37 +01001371Partitioning code over multiple extension modules
1372=================================================
1373
Wenzel Jakob90d2f5e2016-04-11 14:30:11 +02001374It's straightforward to split binding code over multiple extension modules,
1375while referencing types that are declared elsewhere. Everything "just" works
1376without any special precautions. One exception to this rule occurs when
1377extending a type declared in another extension module. Recall the basic example
1378from Section :ref:`inheritance`.
Wenzel Jakob2dfbade2016-01-17 22:36:37 +01001379
1380.. code-block:: cpp
1381
1382 py::class_<Pet> pet(m, "Pet");
1383 pet.def(py::init<const std::string &>())
1384 .def_readwrite("name", &Pet::name);
1385
1386 py::class_<Dog>(m, "Dog", pet /* <- specify parent */)
1387 .def(py::init<const std::string &>())
1388 .def("bark", &Dog::bark);
1389
1390Suppose now that ``Pet`` bindings are defined in a module named ``basic``,
1391whereas the ``Dog`` bindings are defined somewhere else. The challenge is of
1392course that the variable ``pet`` is not available anymore though it is needed
1393to indicate the inheritance relationship to the constructor of ``class_<Dog>``.
1394However, it can be acquired as follows:
1395
1396.. code-block:: cpp
1397
1398 py::object pet = (py::object) py::module::import("basic").attr("Pet");
1399
1400 py::class_<Dog>(m, "Dog", pet)
1401 .def(py::init<const std::string &>())
1402 .def("bark", &Dog::bark);
1403
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001404Alternatively, we can rely on the ``base`` tag, which performs an automated
1405lookup of the corresponding Python type. However, this also requires invoking
1406the ``import`` function once to ensure that the pybind11 binding code of the
1407module ``basic`` has been executed.
1408
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001409.. code-block:: cpp
1410
1411 py::module::import("basic");
1412
1413 py::class_<Dog>(m, "Dog", py::base<Pet>())
1414 .def(py::init<const std::string &>())
1415 .def("bark", &Dog::bark);
Wenzel Jakobeda978e2016-03-15 15:05:40 +01001416
Wenzel Jakob978e3762016-04-07 18:00:41 +02001417Naturally, both methods will fail when there are cyclic dependencies.
1418
Wenzel Jakob90d2f5e2016-04-11 14:30:11 +02001419Note that compiling code which has its default symbol visibility set to
1420*hidden* (e.g. via the command line flag ``-fvisibility=hidden`` on GCC/Clang) can interfere with the
1421ability to access types defined in another extension module. Workarounds
1422include changing the global symbol visibility (not recommended, because it will
1423lead unnecessarily large binaries) or manually exporting types that are
1424accessed by multiple extension modules:
1425
1426.. code-block:: cpp
1427
1428 #ifdef _WIN32
1429 # define EXPORT_TYPE __declspec(dllexport)
1430 #else
1431 # define EXPORT_TYPE __attribute__ ((visibility("default")))
1432 #endif
1433
1434 class EXPORT_TYPE Dog : public Animal {
1435 ...
1436 };
1437
1438
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001439Pickling support
1440================
1441
1442Python's ``pickle`` module provides a powerful facility to serialize and
1443de-serialize a Python object graph into a binary data stream. To pickle and
Wenzel Jakob3d0e6ff2016-04-13 11:48:10 +02001444unpickle C++ classes using pybind11, two additional functions must be provided.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001445Suppose the class in question has the following signature:
1446
1447.. code-block:: cpp
1448
1449 class Pickleable {
1450 public:
1451 Pickleable(const std::string &value) : m_value(value) { }
1452 const std::string &value() const { return m_value; }
1453
1454 void setExtra(int extra) { m_extra = extra; }
1455 int extra() const { return m_extra; }
1456 private:
1457 std::string m_value;
1458 int m_extra = 0;
1459 };
1460
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001461The binding code including the requisite ``__setstate__`` and ``__getstate__`` methods [#f3]_
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001462looks as follows:
1463
1464.. code-block:: cpp
1465
1466 py::class_<Pickleable>(m, "Pickleable")
1467 .def(py::init<std::string>())
1468 .def("value", &Pickleable::value)
1469 .def("extra", &Pickleable::extra)
1470 .def("setExtra", &Pickleable::setExtra)
1471 .def("__getstate__", [](const Pickleable &p) {
1472 /* Return a tuple that fully encodes the state of the object */
1473 return py::make_tuple(p.value(), p.extra());
1474 })
1475 .def("__setstate__", [](Pickleable &p, py::tuple t) {
1476 if (t.size() != 2)
1477 throw std::runtime_error("Invalid state!");
1478
Wenzel Jakobd40885a2016-04-13 13:30:05 +02001479 /* Invoke the in-place constructor. Note that this is needed even
1480 when the object just has a trivial default constructor */
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001481 new (&p) Pickleable(t[0].cast<std::string>());
1482
1483 /* Assign any additional state */
1484 p.setExtra(t[1].cast<int>());
1485 });
1486
1487An instance can now be pickled as follows:
1488
1489.. code-block:: python
1490
1491 try:
1492 import cPickle as pickle # Use cPickle on Python 2.7
1493 except ImportError:
1494 import pickle
1495
1496 p = Pickleable("test_value")
1497 p.setExtra(15)
Wenzel Jakob81e09752016-04-30 23:13:03 +02001498 data = pickle.dumps(p, 2)
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001499
Wenzel Jakob81e09752016-04-30 23:13:03 +02001500Note that only the cPickle module is supported on Python 2.7. The second
1501argument to ``dumps`` is also crucial: it selects the pickle protocol version
15022, since the older version 1 is not supported. Newer versions are also fine—for
1503instance, specify ``-1`` to always use the latest available version. Beware:
1504failure to follow these instructions will cause important pybind11 memory
1505allocation routines to be skipped during unpickling, which will likely lead to
1506memory corruption and/or segmentation faults.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001507
1508.. seealso::
1509
1510 The file :file:`example/example15.cpp` contains a complete example that
1511 demonstrates how to pickle and unpickle types using pybind11 in more detail.
1512
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001513.. [#f3] http://docs.python.org/3/library/pickle.html#pickling-class-instances
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001514
1515Generating documentation using Sphinx
1516=====================================
1517
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001518Sphinx [#f4]_ has the ability to inspect the signatures and documentation
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001519strings in pybind11-based extension modules to automatically generate beautiful
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001520documentation in a variety formats. The pbtest repository [#f5]_ contains a
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001521simple example repository which uses this approach.
1522
1523There are two potential gotchas when using this approach: first, make sure that
1524the resulting strings do not contain any :kbd:`TAB` characters, which break the
1525docstring parsing routines. You may want to use C++11 raw string literals,
1526which are convenient for multi-line comments. Conveniently, any excess
1527indentation will be automatically be removed by Sphinx. However, for this to
1528work, it is important that all lines are indented consistently, i.e.:
1529
1530.. code-block:: cpp
1531
1532 // ok
1533 m.def("foo", &foo, R"mydelimiter(
1534 The foo function
1535
1536 Parameters
1537 ----------
1538 )mydelimiter");
1539
1540 // *not ok*
1541 m.def("foo", &foo, R"mydelimiter(The foo function
1542
1543 Parameters
1544 ----------
1545 )mydelimiter");
1546
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001547.. [#f4] http://www.sphinx-doc.org
1548.. [#f5] http://github.com/pybind/pbtest