blob: 26046e1b40a7f186b6bc2a180595e9c5237690b5 [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
Brad Harmon835fc062016-06-16 13:19:15 -0500142This example demonstrates using python named parameters in C++ callbacks which
143requires using ``py::cpp_function`` as a wrapper. Usage is similar to defining
144methods of classes:
145
146.. code-block:: cpp
147
148 py::cpp_function func_cpp() {
149 return py::cpp_function([](int i) { return i+1; },
150 py::arg("number"));
151 }
152
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200153After including the extra header file :file:`pybind11/functional.h`, it is almost
Brad Harmon835fc062016-06-16 13:19:15 -0500154trivial to generate binding code for all of these functions.
Wenzel Jakob93296692015-10-13 23:21:54 +0200155
156.. code-block:: cpp
157
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200158 #include <pybind11/functional.h>
Wenzel Jakob93296692015-10-13 23:21:54 +0200159
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200160 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200161 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200162
163 m.def("func_arg", &func_arg);
164 m.def("func_ret", &func_ret);
Brad Harmon835fc062016-06-16 13:19:15 -0500165 m.def("func_cpp", &func_cpp);
Wenzel Jakob93296692015-10-13 23:21:54 +0200166
167 return m.ptr();
168 }
169
170The following interactive session shows how to call them from Python.
171
Wenzel Jakob99279f72016-06-03 11:19:29 +0200172.. code-block:: pycon
Wenzel Jakob93296692015-10-13 23:21:54 +0200173
174 $ python
175 >>> import example
176 >>> def square(i):
177 ... return i * i
178 ...
179 >>> example.func_arg(square)
180 100L
181 >>> square_plus_1 = example.func_ret(square)
182 >>> square_plus_1(4)
183 17L
Brad Harmon835fc062016-06-16 13:19:15 -0500184 >>> plus_1 = func_cpp()
185 >>> plus_1(number=43)
186 44L
Wenzel Jakob93296692015-10-13 23:21:54 +0200187
Wenzel Jakoba4175d62015-11-17 08:30:34 +0100188.. warning::
189
190 Keep in mind that passing a function from C++ to Python (or vice versa)
191 will instantiate a piece of wrapper code that translates function
Wenzel Jakob954b7932016-07-10 10:13:18 +0200192 invocations between the two languages. Naturally, this translation
193 increases the computational cost of each function call somewhat. A
194 problematic situation can arise when a function is copied back and forth
195 between Python and C++ many times in a row, in which case the underlying
196 wrappers will accumulate correspondingly. The resulting long sequence of
197 C++ -> Python -> C++ -> ... roundtrips can significantly decrease
198 performance.
199
200 There is one exception: pybind11 detects case where a stateless function
201 (i.e. a function pointer or a lambda function without captured variables)
202 is passed as an argument to another C++ function exposed in Python. In this
203 case, there is no overhead. Pybind11 will extract the underlying C++
204 function pointer from the wrapped function to sidestep a potential C++ ->
205 Python -> C++ roundtrip. This is demonstrated in Example 5.
206
207.. note::
208
209 This functionality is very useful when generating bindings for callbacks in
210 C++ libraries (e.g. GUI libraries, asynchronous networking libraries, etc.).
211
212 The file :file:`example/example5.cpp` contains a complete example that
213 demonstrates how to work with callbacks and anonymous functions in more detail.
Wenzel Jakoba4175d62015-11-17 08:30:34 +0100214
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200215Overriding virtual functions in Python
216======================================
217
Wenzel Jakob93296692015-10-13 23:21:54 +0200218Suppose that a C++ class or interface has a virtual function that we'd like to
219to override from within Python (we'll focus on the class ``Animal``; ``Dog`` is
220given as a specific example of how one would do this with traditional C++
221code).
222
223.. code-block:: cpp
224
225 class Animal {
226 public:
227 virtual ~Animal() { }
228 virtual std::string go(int n_times) = 0;
229 };
230
231 class Dog : public Animal {
232 public:
233 std::string go(int n_times) {
234 std::string result;
235 for (int i=0; i<n_times; ++i)
236 result += "woof! ";
237 return result;
238 }
239 };
240
241Let's also suppose that we are given a plain function which calls the
242function ``go()`` on an arbitrary ``Animal`` instance.
243
244.. code-block:: cpp
245
246 std::string call_go(Animal *animal) {
247 return animal->go(3);
248 }
249
250Normally, the binding code for these classes would look as follows:
251
252.. code-block:: cpp
253
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200254 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200255 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200256
257 py::class_<Animal> animal(m, "Animal");
258 animal
259 .def("go", &Animal::go);
260
261 py::class_<Dog>(m, "Dog", animal)
262 .def(py::init<>());
263
264 m.def("call_go", &call_go);
265
266 return m.ptr();
267 }
268
269However, these bindings are impossible to extend: ``Animal`` is not
270constructible, and we clearly require some kind of "trampoline" that
271redirects virtual calls back to Python.
272
273Defining a new type of ``Animal`` from within Python is possible but requires a
274helper class that is defined as follows:
275
276.. code-block:: cpp
277
278 class PyAnimal : public Animal {
279 public:
280 /* Inherit the constructors */
281 using Animal::Animal;
282
283 /* Trampoline (need one for each virtual function) */
284 std::string go(int n_times) {
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200285 PYBIND11_OVERLOAD_PURE(
Wenzel Jakob93296692015-10-13 23:21:54 +0200286 std::string, /* Return type */
287 Animal, /* Parent class */
288 go, /* Name of function */
289 n_times /* Argument(s) */
290 );
291 }
292 };
293
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200294The macro :func:`PYBIND11_OVERLOAD_PURE` should be used for pure virtual
295functions, and :func:`PYBIND11_OVERLOAD` should be used for functions which have
Wenzel Jakob0d3fc352016-07-08 10:52:10 +0200296a default implementation.
Wenzel Jakob1e3be732016-05-24 23:42:05 +0200297
298There are also two alternate macros :func:`PYBIND11_OVERLOAD_PURE_NAME` and
299:func:`PYBIND11_OVERLOAD_NAME` which take a string-valued name argument
300after the *Name of the function* slot. This is useful when the C++ and Python
301versions of the function have different names, e.g. ``operator()`` vs ``__call__``.
302
303The binding code also needs a few minor adaptations (highlighted):
Wenzel Jakob93296692015-10-13 23:21:54 +0200304
305.. code-block:: cpp
306 :emphasize-lines: 4,6,7
307
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200308 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200309 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200310
Wenzel Jakob86d825f2016-05-26 13:19:27 +0200311 py::class_<Animal, std::unique_ptr<Animal>, PyAnimal /* <--- trampoline*/> animal(m, "Animal");
Wenzel Jakob93296692015-10-13 23:21:54 +0200312 animal
Wenzel Jakob93296692015-10-13 23:21:54 +0200313 .def(py::init<>())
314 .def("go", &Animal::go);
315
316 py::class_<Dog>(m, "Dog", animal)
317 .def(py::init<>());
318
319 m.def("call_go", &call_go);
320
321 return m.ptr();
322 }
323
Wenzel Jakob86d825f2016-05-26 13:19:27 +0200324Importantly, pybind11 is made aware of the trampoline trampoline helper class
325by specifying it as the *third* template argument to :class:`class_`. The
326second argument with the unique pointer is simply the default holder type used
327by pybind11. Following this, we are able to define a constructor as usual.
Wenzel Jakob93296692015-10-13 23:21:54 +0200328
329The Python session below shows how to override ``Animal::go`` and invoke it via
330a virtual method call.
331
Wenzel Jakob99279f72016-06-03 11:19:29 +0200332.. code-block:: pycon
Wenzel Jakob93296692015-10-13 23:21:54 +0200333
334 >>> from example import *
335 >>> d = Dog()
336 >>> call_go(d)
337 u'woof! woof! woof! '
338 >>> class Cat(Animal):
339 ... def go(self, n_times):
340 ... return "meow! " * n_times
341 ...
342 >>> c = Cat()
343 >>> call_go(c)
344 u'meow! meow! meow! '
345
Wenzel Jakob9bb97c12016-06-03 11:19:41 +0200346Please take a look at the :ref:`macro_notes` before using this feature.
Wenzel Jakobbd986fe2016-05-21 10:48:30 +0200347
Wenzel Jakob93296692015-10-13 23:21:54 +0200348.. seealso::
349
350 The file :file:`example/example12.cpp` contains a complete example that
351 demonstrates how to override virtual functions using pybind11 in more
352 detail.
353
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100354
Wenzel Jakob9bb97c12016-06-03 11:19:41 +0200355.. _macro_notes:
356
357General notes regarding convenience macros
358==========================================
359
360pybind11 provides a few convenience macros such as
361:func:`PYBIND11_MAKE_OPAQUE` and :func:`PYBIND11_DECLARE_HOLDER_TYPE`, and
362``PYBIND11_OVERLOAD_*``. Since these are "just" macros that are evaluated
363in the preprocessor (which has no concept of types), they *will* get confused
364by commas in a template argument such as ``PYBIND11_OVERLOAD(MyReturnValue<T1,
365T2>, myFunc)``. In this case, the preprocessor assumes that the comma indicates
366the beginnning of the next parameter. Use a ``typedef`` to bind the template to
367another name and use it in the macro to avoid this problem.
368
369
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100370Global Interpreter Lock (GIL)
371=============================
372
373The classes :class:`gil_scoped_release` and :class:`gil_scoped_acquire` can be
374used to acquire and release the global interpreter lock in the body of a C++
375function call. In this way, long-running C++ code can be parallelized using
376multiple Python threads. Taking the previous section as an example, this could
377be realized as follows (important changes highlighted):
378
379.. code-block:: cpp
380 :emphasize-lines: 8,9,33,34
381
382 class PyAnimal : public Animal {
383 public:
384 /* Inherit the constructors */
385 using Animal::Animal;
386
387 /* Trampoline (need one for each virtual function) */
388 std::string go(int n_times) {
389 /* Acquire GIL before calling Python code */
Wenzel Jakoba4caa852015-12-14 12:39:02 +0100390 py::gil_scoped_acquire acquire;
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100391
392 PYBIND11_OVERLOAD_PURE(
393 std::string, /* Return type */
394 Animal, /* Parent class */
395 go, /* Name of function */
396 n_times /* Argument(s) */
397 );
398 }
399 };
400
401 PYBIND11_PLUGIN(example) {
402 py::module m("example", "pybind11 example plugin");
403
Wenzel Jakob86d825f2016-05-26 13:19:27 +0200404 py::class_<Animal, std::unique_ptr<Animal>, PyAnimal> animal(m, "Animal");
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100405 animal
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100406 .def(py::init<>())
407 .def("go", &Animal::go);
408
409 py::class_<Dog>(m, "Dog", animal)
410 .def(py::init<>());
411
412 m.def("call_go", [](Animal *animal) -> std::string {
413 /* Release GIL before calling into (potentially long-running) C++ code */
Wenzel Jakoba4caa852015-12-14 12:39:02 +0100414 py::gil_scoped_release release;
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100415 return call_go(animal);
416 });
417
418 return m.ptr();
419 }
420
Wenzel Jakob93296692015-10-13 23:21:54 +0200421Passing STL data structures
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200422===========================
423
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200424When including the additional header file :file:`pybind11/stl.h`, conversions
Wenzel Jakob978e3762016-04-07 18:00:41 +0200425between ``std::vector<>``, ``std::list<>``, ``std::set<>``, and ``std::map<>``
426and the Python ``list``, ``set`` and ``dict`` data structures are automatically
427enabled. The types ``std::pair<>`` and ``std::tuple<>`` are already supported
428out of the box with just the core :file:`pybind11/pybind11.h` header.
Wenzel Jakob93296692015-10-13 23:21:54 +0200429
430.. note::
431
Wenzel Jakob44db04f2015-12-14 12:40:45 +0100432 Arbitrary nesting of any of these types is supported.
Wenzel Jakob93296692015-10-13 23:21:54 +0200433
434.. seealso::
435
436 The file :file:`example/example2.cpp` contains a complete example that
437 demonstrates how to pass STL data types in more detail.
438
Wenzel Jakobb2825952016-04-13 23:33:00 +0200439Binding sequence data types, iterators, the slicing protocol, etc.
440==================================================================
Wenzel Jakob93296692015-10-13 23:21:54 +0200441
442Please refer to the supplemental example for details.
443
444.. seealso::
445
446 The file :file:`example/example6.cpp` contains a complete example that
447 shows how to bind a sequence data type, including length queries
448 (``__len__``), iterators (``__iter__``), the slicing protocol and other
449 kinds of useful operations.
450
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200451Return value policies
452=====================
453
Wenzel Jakob93296692015-10-13 23:21:54 +0200454Python and C++ use wildly different ways of managing the memory and lifetime of
455objects managed by them. This can lead to issues when creating bindings for
456functions that return a non-trivial type. Just by looking at the type
457information, it is not clear whether Python should take charge of the returned
458value and eventually free its resources, or if this is handled on the C++ side.
459For this reason, pybind11 provides a several `return value policy` annotations
460that can be passed to the :func:`module::def` and :func:`class_::def`
Wenzel Jakob61d67f02015-12-14 12:53:06 +0100461functions. The default policy is :enum:`return_value_policy::automatic`.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200462
Wenzel Jakobf64feaf2016-04-28 14:33:45 +0200463.. tabularcolumns:: |p{0.5\textwidth}|p{0.45\textwidth}|
464
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200465+--------------------------------------------------+----------------------------------------------------------------------------+
466| Return value policy | Description |
467+==================================================+============================================================================+
468| :enum:`return_value_policy::automatic` | This is the default return value policy, which falls back to the policy |
469| | :enum:`return_value_policy::take_ownership` when the return value is a |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200470| | pointer. Otherwise, it uses :enum:`return_value::move` or |
471| | :enum:`return_value::copy` for rvalue and lvalue references, respectively. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200472| | See below for a description of what all of these different policies do. |
473+--------------------------------------------------+----------------------------------------------------------------------------+
474| :enum:`return_value_policy::automatic_reference` | As above, but use policy :enum:`return_value_policy::reference` when the |
Wenzel Jakob37e1f612016-06-22 14:29:13 +0200475| | return value is a pointer. This is the default conversion policy for |
476| | function arguments when calling Python functions manually from C++ code |
477| | (i.e. via handle::operator()). You probably won't need to use this. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200478+--------------------------------------------------+----------------------------------------------------------------------------+
479| :enum:`return_value_policy::take_ownership` | Reference an existing object (i.e. do not create a new copy) and take |
480| | ownership. Python will call the destructor and delete operator when the |
481| | object's reference count reaches zero. Undefined behavior ensues when the |
Wenzel Jakobf53e3002016-06-30 14:59:23 +0200482| | C++ side does the same. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200483+--------------------------------------------------+----------------------------------------------------------------------------+
484| :enum:`return_value_policy::copy` | Create a new copy of the returned object, which will be owned by Python. |
485| | This policy is comparably safe because the lifetimes of the two instances |
486| | are decoupled. |
487+--------------------------------------------------+----------------------------------------------------------------------------+
488| :enum:`return_value_policy::move` | Use ``std::move`` to move the return value contents into a new instance |
489| | that will be owned by Python. This policy is comparably safe because the |
490| | lifetimes of the two instances (move source and destination) are decoupled.|
491+--------------------------------------------------+----------------------------------------------------------------------------+
492| :enum:`return_value_policy::reference` | Reference an existing object, but do not take ownership. The C++ side is |
493| | responsible for managing the object's lifetime and deallocating it when |
494| | it is no longer used. Warning: undefined behavior will ensue when the C++ |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200495| | side deletes an object that is still referenced and used by Python. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200496+--------------------------------------------------+----------------------------------------------------------------------------+
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200497| :enum:`return_value_policy::reference_internal` | This policy only applies to methods and properties. It references the |
498| | object without taking ownership similar to the above |
499| | :enum:`return_value_policy::reference` policy. In contrast to that policy, |
500| | the function or property's implicit ``this`` argument (called the *parent*)|
501| | is considered to be the the owner of the return value (the *child*). |
502| | pybind11 then couples the lifetime of the parent to the child via a |
503| | reference relationship that ensures that the parent cannot be garbage |
504| | collected while Python is still using the child. More advanced variations |
505| | of this scheme are also possible using combinations of |
506| | :enum:`return_value_policy::reference` and the :class:`keep_alive` call |
507| | policy described next. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200508+--------------------------------------------------+----------------------------------------------------------------------------+
Wenzel Jakob93296692015-10-13 23:21:54 +0200509
Wenzel Jakobfb6aed22016-07-18 20:29:53 +0200510.. warning::
511
512 Code with invalid call policies might access unitialized memory or free
513 data structures multiple times, which can lead to hard-to-debug
514 non-determinism and segmentation faults, hence it is worth spending the
515 time to understand all the different options in the table above.
516
517One important aspect regarding the above policies is that they only apply to
518instances which pybind11 has *not* seen before, in which case the policy
519clarifies essential questions about the return value's lifetime and ownership.
520
521When pybind11 knows the instance already (as identified via its address in
522memory), it will return the existing Python object wrapper rather than creating
523a copy. This means that functions which merely cast a reference (or pointer)
524into a different type don't do what one would expect:
525
526.. code-block:: cpp
527
528 A &func(B &value) { return (A&) value; }
529
530The wrapped version of this function will return the original ``B`` instance.
531To force a cast, the argument should be returned by value.
532
533More common (and equally problematic) are cases where methods (e.g. getters)
534return a pointer or reference to the first attribute of a class.
535
536.. code-block:: cpp
537 :emphasize-lines: 3, 13
538
539 class Example {
540 public:
541 Internal &get_internal() { return internal; }
542 private:
543 Internal internal;
544 };
545
546 PYBIND11_PLUGIN(example) {
547 py::module m("example", "pybind11 example plugin");
548
549 py::class_<Example>(m, "Example")
550 .def(py::init<>())
551 .def("get_internal", &Example::get_internal); /* Note: don't do this! */
552
553 return m.ptr();
554 }
555
556As in the above casting example, the instance and its attribute will be located
557at the same address in memory, which pybind11 will recongnize and return the
558parent instance instead of creating a new Python object that represents the
559attribute. The special :enum:`return_value_policy::reference_internal` policy
560should be used in this case: it disables the same-address optimization and
561ensures that pybind11 returns a reference.
562The following example snippet shows the correct usage:
Wenzel Jakob93296692015-10-13 23:21:54 +0200563
564.. code-block:: cpp
565
566 class Example {
567 public:
568 Internal &get_internal() { return internal; }
569 private:
570 Internal internal;
571 };
572
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200573 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200574 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200575
576 py::class_<Example>(m, "Example")
577 .def(py::init<>())
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200578 .def("get_internal", &Example::get_internal, "Return the internal data",
579 py::return_value_policy::reference_internal);
Wenzel Jakob93296692015-10-13 23:21:54 +0200580
581 return m.ptr();
582 }
583
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200584
nafur717df752016-06-28 18:07:11 +0200585
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200586.. note::
587
588 The next section on :ref:`call_policies` discusses *call policies* that can be
589 specified *in addition* to a return value policy from the list above. Call
590 policies indicate reference relationships that can involve both return values
591 and parameters of functions.
592
593.. note::
594
595 As an alternative to elaborate call policies and lifetime management logic,
596 consider using smart pointers (see the section on :ref:`smart_pointers` for
597 details). Smart pointers can tell whether an object is still referenced from
598 C++ or Python, which generally eliminates the kinds of inconsistencies that
599 can lead to crashes or undefined behavior. For functions returning smart
600 pointers, it is not necessary to specify a return value policy.
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100601
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200602.. _call_policies:
603
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100604Additional call policies
605========================
606
607In addition to the above return value policies, further `call policies` can be
608specified to indicate dependencies between parameters. There is currently just
609one policy named ``keep_alive<Nurse, Patient>``, which indicates that the
610argument with index ``Patient`` should be kept alive at least until the
611argument with index ``Nurse`` is freed by the garbage collector; argument
Wenzel Jakob8e93df82016-05-01 02:36:58 +0200612indices start at one, while zero refers to the return value. For methods, index
613one refers to the implicit ``this`` pointer, while regular arguments begin at
614index two. Arbitrarily many call policies can be specified.
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100615
Wenzel Jakob8e93df82016-05-01 02:36:58 +0200616Consider the following example: the binding code for a list append operation
617that ties the lifetime of the newly added element to the underlying container
618might be declared as follows:
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100619
620.. code-block:: cpp
621
622 py::class_<List>(m, "List")
623 .def("append", &List::append, py::keep_alive<1, 2>());
624
625.. note::
626
627 ``keep_alive`` is analogous to the ``with_custodian_and_ward`` (if Nurse,
628 Patient != 0) and ``with_custodian_and_ward_postcall`` (if Nurse/Patient ==
629 0) policies from Boost.Python.
630
Wenzel Jakob61587162016-01-18 22:38:52 +0100631.. seealso::
632
633 The file :file:`example/example13.cpp` contains a complete example that
634 demonstrates using :class:`keep_alive` in more detail.
635
Wenzel Jakob93296692015-10-13 23:21:54 +0200636Implicit type conversions
637=========================
638
639Suppose that instances of two types ``A`` and ``B`` are used in a project, and
Wenzel Jakob8e93df82016-05-01 02:36:58 +0200640that an ``A`` can easily be converted into an instance of type ``B`` (examples of this
Wenzel Jakob93296692015-10-13 23:21:54 +0200641could be a fixed and an arbitrary precision number type).
642
643.. code-block:: cpp
644
645 py::class_<A>(m, "A")
646 /// ... members ...
647
648 py::class_<B>(m, "B")
649 .def(py::init<A>())
650 /// ... members ...
651
652 m.def("func",
653 [](const B &) { /* .... */ }
654 );
655
656To invoke the function ``func`` using a variable ``a`` containing an ``A``
657instance, we'd have to write ``func(B(a))`` in Python. On the other hand, C++
658will automatically apply an implicit type conversion, which makes it possible
659to directly write ``func(a)``.
660
661In this situation (i.e. where ``B`` has a constructor that converts from
662``A``), the following statement enables similar implicit conversions on the
663Python side:
664
665.. code-block:: cpp
666
667 py::implicitly_convertible<A, B>();
668
Wenzel Jakob3eeea6f2016-06-30 18:10:28 +0200669.. note::
670
671 Implicit conversions from ``A`` to ``B`` only work when ``B`` is a custom
672 data type that is exposed to Python via pybind11.
673
Wenzel Jakobf88af0c2016-06-22 13:52:31 +0200674.. _static_properties:
675
676Static properties
677=================
678
679The section on :ref:`properties` discussed the creation of instance properties
680that are implemented in terms of C++ getters and setters.
681
682Static properties can also be created in a similar way to expose getters and
683setters of static class attributes. It is important to note that the implicit
684``self`` argument also exists in this case and is used to pass the Python
685``type`` subclass instance. This parameter will often not be needed by the C++
686side, and the following example illustrates how to instantiate a lambda getter
687function that ignores it:
688
689.. code-block:: cpp
690
691 py::class_<Foo>(m, "Foo")
692 .def_property_readonly_static("foo", [](py::object /* self */) { return Foo(); });
693
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200694Unique pointers
695===============
696
697Given a class ``Example`` with Python bindings, it's possible to return
698instances wrapped in C++11 unique pointers, like so
699
700.. code-block:: cpp
701
702 std::unique_ptr<Example> create_example() { return std::unique_ptr<Example>(new Example()); }
703
704.. code-block:: cpp
705
706 m.def("create_example", &create_example);
707
708In other words, there is nothing special that needs to be done. While returning
709unique pointers in this way is allowed, it is *illegal* to use them as function
710arguments. For instance, the following function signature cannot be processed
711by pybind11.
712
713.. code-block:: cpp
714
715 void do_something_with_example(std::unique_ptr<Example> ex) { ... }
716
717The above signature would imply that Python needs to give up ownership of an
718object that is passed to this function, which is generally not possible (for
719instance, the object might be referenced elsewhere).
720
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200721.. _smart_pointers:
722
Wenzel Jakob93296692015-10-13 23:21:54 +0200723Smart pointers
724==============
725
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200726This section explains how to pass values that are wrapped in "smart" pointer
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200727types with internal reference counting. For the simpler C++11 unique pointers,
728refer to the previous section.
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200729
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200730The binding generator for classes, :class:`class_`, takes an optional second
Wenzel Jakob93296692015-10-13 23:21:54 +0200731template type, which denotes a special *holder* type that is used to manage
732references to the object. When wrapping a type named ``Type``, the default
733value of this template parameter is ``std::unique_ptr<Type>``, which means that
734the object is deallocated when Python's reference count goes to zero.
735
Wenzel Jakob1853b652015-10-18 15:38:50 +0200736It is possible to switch to other types of reference counting wrappers or smart
737pointers, which is useful in codebases that rely on them. For instance, the
738following snippet causes ``std::shared_ptr`` to be used instead.
Wenzel Jakob93296692015-10-13 23:21:54 +0200739
740.. code-block:: cpp
741
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100742 py::class_<Example, std::shared_ptr<Example> /* <- holder type */> obj(m, "Example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100743
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100744Note that any particular class can only be associated with a single holder type.
Wenzel Jakob93296692015-10-13 23:21:54 +0200745
Wenzel Jakob1853b652015-10-18 15:38:50 +0200746To enable transparent conversions for functions that take shared pointers as an
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100747argument or that return them, a macro invocation similar to the following must
Wenzel Jakob1853b652015-10-18 15:38:50 +0200748be declared at the top level before any binding code:
749
750.. code-block:: cpp
751
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200752 PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr<T>);
Wenzel Jakob1853b652015-10-18 15:38:50 +0200753
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100754.. note::
Wenzel Jakob61d67f02015-12-14 12:53:06 +0100755
756 The first argument of :func:`PYBIND11_DECLARE_HOLDER_TYPE` should be a
757 placeholder name that is used as a template parameter of the second
758 argument. Thus, feel free to use any identifier, but use it consistently on
759 both sides; also, don't use the name of a type that already exists in your
760 codebase.
761
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100762One potential stumbling block when using holder types is that they need to be
763applied consistently. Can you guess what's broken about the following binding
764code?
Wenzel Jakob6e213c92015-11-24 23:05:58 +0100765
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100766.. code-block:: cpp
Wenzel Jakob6e213c92015-11-24 23:05:58 +0100767
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100768 class Child { };
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100769
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100770 class Parent {
771 public:
772 Parent() : child(std::make_shared<Child>()) { }
773 Child *get_child() { return child.get(); } /* Hint: ** DON'T DO THIS ** */
774 private:
775 std::shared_ptr<Child> child;
776 };
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100777
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100778 PYBIND11_PLUGIN(example) {
779 py::module m("example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100780
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100781 py::class_<Child, std::shared_ptr<Child>>(m, "Child");
782
783 py::class_<Parent, std::shared_ptr<Parent>>(m, "Parent")
784 .def(py::init<>())
785 .def("get_child", &Parent::get_child);
786
787 return m.ptr();
788 }
789
790The following Python code will cause undefined behavior (and likely a
791segmentation fault).
792
793.. code-block:: python
794
795 from example import Parent
796 print(Parent().get_child())
797
798The problem is that ``Parent::get_child()`` returns a pointer to an instance of
799``Child``, but the fact that this instance is already managed by
800``std::shared_ptr<...>`` is lost when passing raw pointers. In this case,
801pybind11 will create a second independent ``std::shared_ptr<...>`` that also
802claims ownership of the pointer. In the end, the object will be freed **twice**
803since these shared pointers have no way of knowing about each other.
804
805There are two ways to resolve this issue:
806
8071. For types that are managed by a smart pointer class, never use raw pointers
808 in function arguments or return values. In other words: always consistently
809 wrap pointers into their designated holder types (such as
810 ``std::shared_ptr<...>``). In this case, the signature of ``get_child()``
811 should be modified as follows:
812
813.. code-block:: cpp
814
815 std::shared_ptr<Child> get_child() { return child; }
816
8172. Adjust the definition of ``Child`` by specifying
818 ``std::enable_shared_from_this<T>`` (see cppreference_ for details) as a
819 base class. This adds a small bit of information to ``Child`` that allows
820 pybind11 to realize that there is already an existing
821 ``std::shared_ptr<...>`` and communicate with it. In this case, the
822 declaration of ``Child`` should look as follows:
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100823
Wenzel Jakob6e213c92015-11-24 23:05:58 +0100824.. _cppreference: http://en.cppreference.com/w/cpp/memory/enable_shared_from_this
825
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100826.. code-block:: cpp
827
828 class Child : public std::enable_shared_from_this<Child> { };
829
Wenzel Jakob9bb97c12016-06-03 11:19:41 +0200830
831Please take a look at the :ref:`macro_notes` before using this feature.
832
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100833.. seealso::
834
835 The file :file:`example/example8.cpp` contains a complete example that
836 demonstrates how to work with custom reference-counting holder types in
837 more detail.
838
Wenzel Jakob93296692015-10-13 23:21:54 +0200839.. _custom_constructors:
840
841Custom constructors
842===================
843
844The syntax for binding constructors was previously introduced, but it only
845works when a constructor with the given parameters actually exists on the C++
846side. To extend this to more general cases, let's take a look at what actually
847happens under the hood: the following statement
848
849.. code-block:: cpp
850
851 py::class_<Example>(m, "Example")
852 .def(py::init<int>());
853
854is short hand notation for
855
856.. code-block:: cpp
857
858 py::class_<Example>(m, "Example")
859 .def("__init__",
860 [](Example &instance, int arg) {
861 new (&instance) Example(arg);
862 }
863 );
864
865In other words, :func:`init` creates an anonymous function that invokes an
866in-place constructor. Memory allocation etc. is already take care of beforehand
867within pybind11.
868
Pim Schellart5a7d17f2016-06-17 17:35:59 -0400869.. _catching_and_throwing_exceptions:
870
Wenzel Jakob93296692015-10-13 23:21:54 +0200871Catching and throwing exceptions
872================================
873
874When C++ code invoked from Python throws an ``std::exception``, it is
875automatically converted into a Python ``Exception``. pybind11 defines multiple
876special exception classes that will map to different types of Python
877exceptions:
878
Wenzel Jakobf64feaf2016-04-28 14:33:45 +0200879.. tabularcolumns:: |p{0.5\textwidth}|p{0.45\textwidth}|
880
Wenzel Jakob978e3762016-04-07 18:00:41 +0200881+--------------------------------------+------------------------------+
882| C++ exception type | Python exception type |
883+======================================+==============================+
884| :class:`std::exception` | ``RuntimeError`` |
885+--------------------------------------+------------------------------+
886| :class:`std::bad_alloc` | ``MemoryError`` |
887+--------------------------------------+------------------------------+
888| :class:`std::domain_error` | ``ValueError`` |
889+--------------------------------------+------------------------------+
890| :class:`std::invalid_argument` | ``ValueError`` |
891+--------------------------------------+------------------------------+
892| :class:`std::length_error` | ``ValueError`` |
893+--------------------------------------+------------------------------+
894| :class:`std::out_of_range` | ``ValueError`` |
895+--------------------------------------+------------------------------+
896| :class:`std::range_error` | ``ValueError`` |
897+--------------------------------------+------------------------------+
898| :class:`pybind11::stop_iteration` | ``StopIteration`` (used to |
899| | implement custom iterators) |
900+--------------------------------------+------------------------------+
901| :class:`pybind11::index_error` | ``IndexError`` (used to |
902| | indicate out of bounds |
903| | accesses in ``__getitem__``, |
904| | ``__setitem__``, etc.) |
905+--------------------------------------+------------------------------+
Sergey Lyskova95bde12016-05-08 19:31:55 -0400906| :class:`pybind11::value_error` | ``ValueError`` (used to |
907| | indicate wrong value passed |
908| | in ``container.remove(...)`` |
909+--------------------------------------+------------------------------+
Wenzel Jakob978e3762016-04-07 18:00:41 +0200910| :class:`pybind11::error_already_set` | Indicates that the Python |
911| | exception flag has already |
912| | been initialized |
913+--------------------------------------+------------------------------+
Wenzel Jakob93296692015-10-13 23:21:54 +0200914
915When a Python function invoked from C++ throws an exception, it is converted
916into a C++ exception of type :class:`error_already_set` whose string payload
917contains a textual summary.
918
919There is also a special exception :class:`cast_error` that is thrown by
920:func:`handle::call` when the input arguments cannot be converted to Python
921objects.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200922
Pim Schellart5a7d17f2016-06-17 17:35:59 -0400923Registering custom exception translators
924========================================
925
926If the default exception conversion policy described
927:ref:`above <catching_and_throwing_exceptions>`
928is insufficient, pybind11 also provides support for registering custom
929exception translators.
930
931The function ``register_exception_translator(translator)`` takes a stateless
932callable (e.g. a function pointer or a lambda function without captured
933variables) with the following call signature: ``void(std::exception_ptr)``.
934
935When a C++ exception is thrown, registered exception translators are tried
936in reverse order of registration (i.e. the last registered translator gets
937a first shot at handling the exception).
938
939Inside the translator, ``std::rethrow_exception`` should be used within
940a try block to re-throw the exception. A catch clause can then use
941``PyErr_SetString`` to set a Python exception as demonstrated
942in :file:`example19.cpp``.
943
944This example also demonstrates how to create custom exception types
945with ``py::exception``.
946
947The following example demonstrates this for a hypothetical exception class
948``MyCustomException``:
949
950.. code-block:: cpp
951
952 py::register_exception_translator([](std::exception_ptr p) {
953 try {
954 if (p) std::rethrow_exception(p);
955 } catch (const MyCustomException &e) {
956 PyErr_SetString(PyExc_RuntimeError, e.what());
957 }
958 });
959
960Multiple exceptions can be handled by a single translator. If the exception is
961not caught by the current translator, the previously registered one gets a
962chance.
963
964If none of the registered exception translators is able to handle the
965exception, it is handled by the default converter as described in the previous
966section.
967
968.. note::
969
970 You must either call ``PyErr_SetString`` for every exception caught in a
971 custom exception translator. Failure to do so will cause Python to crash
972 with ``SystemError: error return without exception set``.
973
974 Exceptions that you do not plan to handle should simply not be caught.
975
976 You may also choose to explicity (re-)throw the exception to delegate it to
977 the other existing exception translators.
978
979 The ``py::exception`` wrapper for creating custom exceptions cannot (yet)
980 be used as a ``py::base``.
981
Wenzel Jakob9e0a0562016-05-05 20:33:54 +0200982.. _opaque:
983
984Treating STL data structures as opaque objects
985==============================================
986
987pybind11 heavily relies on a template matching mechanism to convert parameters
988and return values that are constructed from STL data types such as vectors,
989linked lists, hash tables, etc. This even works in a recursive manner, for
990instance to deal with lists of hash maps of pairs of elementary and custom
991types, etc.
992
993However, a fundamental limitation of this approach is that internal conversions
994between Python and C++ types involve a copy operation that prevents
995pass-by-reference semantics. What does this mean?
996
997Suppose we bind the following function
998
999.. code-block:: cpp
1000
1001 void append_1(std::vector<int> &v) {
1002 v.push_back(1);
1003 }
1004
1005and call it from Python, the following happens:
1006
Wenzel Jakob99279f72016-06-03 11:19:29 +02001007.. code-block:: pycon
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001008
1009 >>> v = [5, 6]
1010 >>> append_1(v)
1011 >>> print(v)
1012 [5, 6]
1013
1014As you can see, when passing STL data structures by reference, modifications
1015are not propagated back the Python side. A similar situation arises when
1016exposing STL data structures using the ``def_readwrite`` or ``def_readonly``
1017functions:
1018
1019.. code-block:: cpp
1020
1021 /* ... definition ... */
1022
1023 class MyClass {
1024 std::vector<int> contents;
1025 };
1026
1027 /* ... binding code ... */
1028
1029 py::class_<MyClass>(m, "MyClass")
1030 .def(py::init<>)
1031 .def_readwrite("contents", &MyClass::contents);
1032
1033In this case, properties can be read and written in their entirety. However, an
1034``append`` operaton involving such a list type has no effect:
1035
Wenzel Jakob99279f72016-06-03 11:19:29 +02001036.. code-block:: pycon
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001037
1038 >>> m = MyClass()
1039 >>> m.contents = [5, 6]
1040 >>> print(m.contents)
1041 [5, 6]
1042 >>> m.contents.append(7)
1043 >>> print(m.contents)
1044 [5, 6]
1045
1046To deal with both of the above situations, pybind11 provides a macro named
1047``PYBIND11_MAKE_OPAQUE(T)`` that disables the template-based conversion
1048machinery of types, thus rendering them *opaque*. The contents of opaque
1049objects are never inspected or extracted, hence they can be passed by
1050reference. For instance, to turn ``std::vector<int>`` into an opaque type, add
1051the declaration
1052
1053.. code-block:: cpp
1054
1055 PYBIND11_MAKE_OPAQUE(std::vector<int>);
1056
1057before any binding code (e.g. invocations to ``class_::def()``, etc.). This
1058macro must be specified at the top level, since instantiates a partial template
1059overload. If your binding code consists of multiple compilation units, it must
1060be present in every file preceding any usage of ``std::vector<int>``. Opaque
1061types must also have a corresponding ``class_`` declaration to associate them
1062with a name in Python, and to define a set of available operations:
1063
1064.. code-block:: cpp
1065
1066 py::class_<std::vector<int>>(m, "IntVector")
1067 .def(py::init<>())
1068 .def("clear", &std::vector<int>::clear)
1069 .def("pop_back", &std::vector<int>::pop_back)
1070 .def("__len__", [](const std::vector<int> &v) { return v.size(); })
1071 .def("__iter__", [](std::vector<int> &v) {
1072 return py::make_iterator(v.begin(), v.end());
1073 }, py::keep_alive<0, 1>()) /* Keep vector alive while iterator is used */
1074 // ....
1075
Wenzel Jakob9bb97c12016-06-03 11:19:41 +02001076Please take a look at the :ref:`macro_notes` before using this feature.
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001077
1078.. seealso::
1079
1080 The file :file:`example/example14.cpp` contains a complete example that
1081 demonstrates how to create and expose opaque types using pybind11 in more
1082 detail.
1083
1084.. _eigen:
1085
1086Transparent conversion of dense and sparse Eigen data types
1087===========================================================
1088
1089Eigen [#f1]_ is C++ header-based library for dense and sparse linear algebra. Due to
1090its popularity and widespread adoption, pybind11 provides transparent
1091conversion support between Eigen and Scientific Python linear algebra data types.
1092
1093Specifically, when including the optional header file :file:`pybind11/eigen.h`,
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001094pybind11 will automatically and transparently convert
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001095
10961. Static and dynamic Eigen dense vectors and matrices to instances of
1097 ``numpy.ndarray`` (and vice versa).
1098
10991. Eigen sparse vectors and matrices to instances of
1100 ``scipy.sparse.csr_matrix``/``scipy.sparse.csc_matrix`` (and vice versa).
1101
1102This makes it possible to bind most kinds of functions that rely on these types.
1103One major caveat are functions that take Eigen matrices *by reference* and modify
1104them somehow, in which case the information won't be propagated to the caller.
1105
1106.. code-block:: cpp
1107
1108 /* The Python bindings of this function won't replicate
1109 the intended effect of modifying the function argument */
1110 void scale_by_2(Eigen::Vector3f &v) {
1111 v *= 2;
1112 }
1113
1114To see why this is, refer to the section on :ref:`opaque` (although that
1115section specifically covers STL data types, the underlying issue is the same).
1116The next two sections discuss an efficient alternative for exposing the
1117underlying native Eigen types as opaque objects in a way that still integrates
1118with NumPy and SciPy.
1119
1120.. [#f1] http://eigen.tuxfamily.org
1121
1122.. seealso::
1123
1124 The file :file:`example/eigen.cpp` contains a complete example that
1125 shows how to pass Eigen sparse and dense data types in more detail.
1126
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001127Buffer protocol
1128===============
1129
1130Python supports an extremely general and convenient approach for exchanging
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001131data between plugin libraries. Types can expose a buffer view [#f2]_, which
1132provides fast direct access to the raw internal data representation. Suppose we
1133want to bind the following simplistic Matrix class:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001134
1135.. code-block:: cpp
1136
1137 class Matrix {
1138 public:
1139 Matrix(size_t rows, size_t cols) : m_rows(rows), m_cols(cols) {
1140 m_data = new float[rows*cols];
1141 }
1142 float *data() { return m_data; }
1143 size_t rows() const { return m_rows; }
1144 size_t cols() const { return m_cols; }
1145 private:
1146 size_t m_rows, m_cols;
1147 float *m_data;
1148 };
1149
1150The following binding code exposes the ``Matrix`` contents as a buffer object,
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001151making it possible to cast Matrices into NumPy arrays. It is even possible to
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001152completely avoid copy operations with Python expressions like
1153``np.array(matrix_instance, copy = False)``.
1154
1155.. code-block:: cpp
1156
1157 py::class_<Matrix>(m, "Matrix")
1158 .def_buffer([](Matrix &m) -> py::buffer_info {
1159 return py::buffer_info(
Wenzel Jakob876eeab2016-05-04 22:22:48 +02001160 m.data(), /* Pointer to buffer */
1161 sizeof(float), /* Size of one scalar */
1162 py::format_descriptor<float>::value, /* Python struct-style format descriptor */
1163 2, /* Number of dimensions */
1164 { m.rows(), m.cols() }, /* Buffer dimensions */
1165 { sizeof(float) * m.rows(), /* Strides (in bytes) for each index */
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001166 sizeof(float) }
1167 );
1168 });
1169
1170The snippet above binds a lambda function, which can create ``py::buffer_info``
1171description records on demand describing a given matrix. The contents of
1172``py::buffer_info`` mirror the Python buffer protocol specification.
1173
1174.. code-block:: cpp
1175
1176 struct buffer_info {
1177 void *ptr;
1178 size_t itemsize;
1179 std::string format;
1180 int ndim;
1181 std::vector<size_t> shape;
1182 std::vector<size_t> strides;
1183 };
1184
1185To create a C++ function that can take a Python buffer object as an argument,
1186simply use the type ``py::buffer`` as one of its arguments. Buffers can exist
1187in a great variety of configurations, hence some safety checks are usually
1188necessary in the function body. Below, you can see an basic example on how to
1189define a custom constructor for the Eigen double precision matrix
1190(``Eigen::MatrixXd``) type, which supports initialization from compatible
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001191buffer objects (e.g. a NumPy matrix).
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001192
1193.. code-block:: cpp
1194
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001195 /* Bind MatrixXd (or some other Eigen type) to Python */
1196 typedef Eigen::MatrixXd Matrix;
1197
1198 typedef Matrix::Scalar Scalar;
1199 constexpr bool rowMajor = Matrix::Flags & Eigen::RowMajorBit;
1200
1201 py::class_<Matrix>(m, "Matrix")
1202 .def("__init__", [](Matrix &m, py::buffer b) {
Wenzel Jakobe7628532016-05-05 10:04:44 +02001203 typedef Eigen::Stride<Eigen::Dynamic, Eigen::Dynamic> Strides;
Wenzel Jakobe7628532016-05-05 10:04:44 +02001204
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001205 /* Request a buffer descriptor from Python */
1206 py::buffer_info info = b.request();
1207
1208 /* Some sanity checks ... */
Wenzel Jakobe7628532016-05-05 10:04:44 +02001209 if (info.format != py::format_descriptor<Scalar>::value)
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001210 throw std::runtime_error("Incompatible format: expected a double array!");
1211
1212 if (info.ndim != 2)
1213 throw std::runtime_error("Incompatible buffer dimension!");
1214
Wenzel Jakobe7628532016-05-05 10:04:44 +02001215 auto strides = Strides(
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001216 info.strides[rowMajor ? 0 : 1] / sizeof(Scalar),
1217 info.strides[rowMajor ? 1 : 0] / sizeof(Scalar));
Wenzel Jakobe7628532016-05-05 10:04:44 +02001218
1219 auto map = Eigen::Map<Matrix, 0, Strides>(
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001220 static_cat<Scalar *>(info.ptr), info.shape[0], info.shape[1], strides);
Wenzel Jakobe7628532016-05-05 10:04:44 +02001221
1222 new (&m) Matrix(map);
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001223 });
1224
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001225For reference, the ``def_buffer()`` call for this Eigen data type should look
1226as follows:
1227
1228.. code-block:: cpp
1229
1230 .def_buffer([](Matrix &m) -> py::buffer_info {
1231 return py::buffer_info(
1232 m.data(), /* Pointer to buffer */
1233 sizeof(Scalar), /* Size of one scalar */
1234 /* Python struct-style format descriptor */
1235 py::format_descriptor<Scalar>::value,
1236 /* Number of dimensions */
1237 2,
1238 /* Buffer dimensions */
1239 { (size_t) m.rows(),
1240 (size_t) m.cols() },
1241 /* Strides (in bytes) for each index */
1242 { sizeof(Scalar) * (rowMajor ? m.cols() : 1),
1243 sizeof(Scalar) * (rowMajor ? 1 : m.rows()) }
1244 );
1245 })
1246
1247For a much easier approach of binding Eigen types (although with some
1248limitations), refer to the section on :ref:`eigen`.
1249
Wenzel Jakob93296692015-10-13 23:21:54 +02001250.. seealso::
1251
1252 The file :file:`example/example7.cpp` contains a complete example that
1253 demonstrates using the buffer protocol with pybind11 in more detail.
1254
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001255.. [#f2] http://docs.python.org/3/c-api/buffer.html
Wenzel Jakob978e3762016-04-07 18:00:41 +02001256
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001257NumPy support
1258=============
1259
1260By exchanging ``py::buffer`` with ``py::array`` in the above snippet, we can
1261restrict the function so that it only accepts NumPy arrays (rather than any
Wenzel Jakob978e3762016-04-07 18:00:41 +02001262type of Python object satisfying the buffer protocol).
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001263
1264In many situations, we want to define a function which only accepts a NumPy
Wenzel Jakob93296692015-10-13 23:21:54 +02001265array of a certain data type. This is possible via the ``py::array_t<T>``
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001266template. For instance, the following function requires the argument to be a
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001267NumPy array containing double precision values.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001268
1269.. code-block:: cpp
1270
Wenzel Jakob93296692015-10-13 23:21:54 +02001271 void f(py::array_t<double> array);
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001272
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001273When it is invoked with a different type (e.g. an integer or a list of
1274integers), the binding code will attempt to cast the input into a NumPy array
1275of the requested type. Note that this feature requires the
1276:file:``pybind11/numpy.h`` header to be included.
1277
1278Data in NumPy arrays is not guaranteed to packed in a dense manner;
1279furthermore, entries can be separated by arbitrary column and row strides.
1280Sometimes, it can be useful to require a function to only accept dense arrays
1281using either the C (row-major) or Fortran (column-major) ordering. This can be
1282accomplished via a second template argument with values ``py::array::c_style``
1283or ``py::array::f_style``.
1284
1285.. code-block:: cpp
1286
Wenzel Jakobb47a9de2016-05-19 16:02:09 +02001287 void f(py::array_t<double, py::array::c_style | py::array::forcecast> array);
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001288
Wenzel Jakobb47a9de2016-05-19 16:02:09 +02001289The ``py::array::forcecast`` argument is the default value of the second
1290template paramenter, and it ensures that non-conforming arguments are converted
1291into an array satisfying the specified requirements instead of trying the next
1292function overload.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001293
1294Vectorizing functions
1295=====================
1296
1297Suppose we want to bind a function with the following signature to Python so
1298that it can process arbitrary NumPy array arguments (vectors, matrices, general
1299N-D arrays) in addition to its normal arguments:
1300
1301.. code-block:: cpp
1302
1303 double my_func(int x, float y, double z);
1304
Wenzel Jakob8f4eb002015-10-15 18:13:33 +02001305After including the ``pybind11/numpy.h`` header, this is extremely simple:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001306
1307.. code-block:: cpp
1308
1309 m.def("vectorized_func", py::vectorize(my_func));
1310
1311Invoking the function like below causes 4 calls to be made to ``my_func`` with
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001312each of the array elements. The significant advantage of this compared to
Wenzel Jakob978e3762016-04-07 18:00:41 +02001313solutions like ``numpy.vectorize()`` is that the loop over the elements runs
1314entirely on the C++ side and can be crunched down into a tight, optimized loop
1315by the compiler. The result is returned as a NumPy array of type
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001316``numpy.dtype.float64``.
1317
Wenzel Jakob99279f72016-06-03 11:19:29 +02001318.. code-block:: pycon
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001319
1320 >>> x = np.array([[1, 3],[5, 7]])
1321 >>> y = np.array([[2, 4],[6, 8]])
1322 >>> z = 3
1323 >>> result = vectorized_func(x, y, z)
1324
1325The scalar argument ``z`` is transparently replicated 4 times. The input
1326arrays ``x`` and ``y`` are automatically converted into the right types (they
1327are of type ``numpy.dtype.int64`` but need to be ``numpy.dtype.int32`` and
1328``numpy.dtype.float32``, respectively)
1329
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001330Sometimes we might want to explicitly exclude an argument from the vectorization
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001331because it makes little sense to wrap it in a NumPy array. For instance,
1332suppose the function signature was
1333
1334.. code-block:: cpp
1335
1336 double my_func(int x, float y, my_custom_type *z);
1337
1338This can be done with a stateful Lambda closure:
1339
1340.. code-block:: cpp
1341
1342 // Vectorize a lambda function with a capture object (e.g. to exclude some arguments from the vectorization)
1343 m.def("vectorized_func",
Wenzel Jakob93296692015-10-13 23:21:54 +02001344 [](py::array_t<int> x, py::array_t<float> y, my_custom_type *z) {
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001345 auto stateful_closure = [z](int x, float y) { return my_func(x, y, z); };
1346 return py::vectorize(stateful_closure)(x, y);
1347 }
1348 );
1349
Wenzel Jakob61587162016-01-18 22:38:52 +01001350In cases where the computation is too complicated to be reduced to
1351``vectorize``, it will be necessary to create and access the buffer contents
1352manually. The following snippet contains a complete example that shows how this
1353works (the code is somewhat contrived, since it could have been done more
1354simply using ``vectorize``).
1355
1356.. code-block:: cpp
1357
1358 #include <pybind11/pybind11.h>
1359 #include <pybind11/numpy.h>
1360
1361 namespace py = pybind11;
1362
1363 py::array_t<double> add_arrays(py::array_t<double> input1, py::array_t<double> input2) {
1364 auto buf1 = input1.request(), buf2 = input2.request();
1365
1366 if (buf1.ndim != 1 || buf2.ndim != 1)
1367 throw std::runtime_error("Number of dimensions must be one");
1368
1369 if (buf1.shape[0] != buf2.shape[0])
1370 throw std::runtime_error("Input shapes must match");
1371
1372 auto result = py::array(py::buffer_info(
1373 nullptr, /* Pointer to data (nullptr -> ask NumPy to allocate!) */
1374 sizeof(double), /* Size of one item */
Nils Wernerf7048f22016-05-19 11:17:17 +02001375 py::format_descriptor<double>::value(), /* Buffer format */
Wenzel Jakob61587162016-01-18 22:38:52 +01001376 buf1.ndim, /* How many dimensions? */
1377 { buf1.shape[0] }, /* Number of elements for each dimension */
1378 { sizeof(double) } /* Strides for each dimension */
1379 ));
1380
1381 auto buf3 = result.request();
1382
1383 double *ptr1 = (double *) buf1.ptr,
1384 *ptr2 = (double *) buf2.ptr,
1385 *ptr3 = (double *) buf3.ptr;
1386
1387 for (size_t idx = 0; idx < buf1.shape[0]; idx++)
1388 ptr3[idx] = ptr1[idx] + ptr2[idx];
1389
1390 return result;
1391 }
1392
1393 PYBIND11_PLUGIN(test) {
1394 py::module m("test");
1395 m.def("add_arrays", &add_arrays, "Add two NumPy arrays");
1396 return m.ptr();
1397 }
1398
Wenzel Jakob93296692015-10-13 23:21:54 +02001399.. seealso::
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001400
Wenzel Jakob93296692015-10-13 23:21:54 +02001401 The file :file:`example/example10.cpp` contains a complete example that
1402 demonstrates using :func:`vectorize` in more detail.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001403
Wenzel Jakob93296692015-10-13 23:21:54 +02001404Functions taking Python objects as arguments
1405============================================
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001406
Wenzel Jakob93296692015-10-13 23:21:54 +02001407pybind11 exposes all major Python types using thin C++ wrapper classes. These
1408wrapper classes can also be used as parameters of functions in bindings, which
1409makes it possible to directly work with native Python types on the C++ side.
1410For instance, the following statement iterates over a Python ``dict``:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001411
Wenzel Jakob93296692015-10-13 23:21:54 +02001412.. code-block:: cpp
1413
1414 void print_dict(py::dict dict) {
1415 /* Easily interact with Python types */
1416 for (auto item : dict)
1417 std::cout << "key=" << item.first << ", "
1418 << "value=" << item.second << std::endl;
1419 }
1420
1421Available types include :class:`handle`, :class:`object`, :class:`bool_`,
Wenzel Jakob27e8e102016-01-17 22:36:37 +01001422:class:`int_`, :class:`float_`, :class:`str`, :class:`bytes`, :class:`tuple`,
Wenzel Jakobf64feaf2016-04-28 14:33:45 +02001423:class:`list`, :class:`dict`, :class:`slice`, :class:`none`, :class:`capsule`,
1424:class:`iterable`, :class:`iterator`, :class:`function`, :class:`buffer`,
1425:class:`array`, and :class:`array_t`.
Wenzel Jakob93296692015-10-13 23:21:54 +02001426
Wenzel Jakob436b7312015-10-20 01:04:30 +02001427In this kind of mixed code, it is often necessary to convert arbitrary C++
1428types to Python, which can be done using :func:`cast`:
1429
1430.. code-block:: cpp
1431
1432 MyClass *cls = ..;
1433 py::object obj = py::cast(cls);
1434
1435The reverse direction uses the following syntax:
1436
1437.. code-block:: cpp
1438
1439 py::object obj = ...;
1440 MyClass *cls = obj.cast<MyClass *>();
1441
1442When conversion fails, both directions throw the exception :class:`cast_error`.
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001443It is also possible to call python functions via ``operator()``.
1444
1445.. code-block:: cpp
1446
1447 py::function f = <...>;
1448 py::object result_py = f(1234, "hello", some_instance);
1449 MyClass &result = result_py.cast<MyClass>();
1450
1451The special ``f(*args)`` and ``f(*args, **kwargs)`` syntax is also supported to
1452supply arbitrary argument and keyword lists, although these cannot be mixed
1453with other parameters.
1454
1455.. code-block:: cpp
1456
1457 py::function f = <...>;
1458 py::tuple args = py::make_tuple(1234);
1459 py::dict kwargs;
1460 kwargs["y"] = py::cast(5678);
1461 py::object result = f(*args, **kwargs);
Wenzel Jakob436b7312015-10-20 01:04:30 +02001462
Wenzel Jakob93296692015-10-13 23:21:54 +02001463.. seealso::
1464
1465 The file :file:`example/example2.cpp` contains a complete example that
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001466 demonstrates passing native Python types in more detail. The file
1467 :file:`example/example11.cpp` discusses usage of ``args`` and ``kwargs``.
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001468
1469Default arguments revisited
1470===========================
1471
1472The section on :ref:`default_args` previously discussed basic usage of default
1473arguments using pybind11. One noteworthy aspect of their implementation is that
1474default arguments are converted to Python objects right at declaration time.
1475Consider the following example:
1476
1477.. code-block:: cpp
1478
1479 py::class_<MyClass>("MyClass")
1480 .def("myFunction", py::arg("arg") = SomeType(123));
1481
1482In this case, pybind11 must already be set up to deal with values of the type
1483``SomeType`` (via a prior instantiation of ``py::class_<SomeType>``), or an
1484exception will be thrown.
1485
1486Another aspect worth highlighting is that the "preview" of the default argument
1487in the function signature is generated using the object's ``__repr__`` method.
1488If not available, the signature may not be very helpful, e.g.:
1489
Wenzel Jakob99279f72016-06-03 11:19:29 +02001490.. code-block:: pycon
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001491
1492 FUNCTIONS
1493 ...
1494 | myFunction(...)
Wenzel Jakob48548ea2016-01-17 22:36:44 +01001495 | Signature : (MyClass, arg : SomeType = <SomeType object at 0x101b7b080>) -> NoneType
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001496 ...
1497
1498The first way of addressing this is by defining ``SomeType.__repr__``.
1499Alternatively, it is possible to specify the human-readable preview of the
1500default argument manually using the ``arg_t`` notation:
1501
1502.. code-block:: cpp
1503
1504 py::class_<MyClass>("MyClass")
1505 .def("myFunction", py::arg_t<SomeType>("arg", SomeType(123), "SomeType(123)"));
1506
Wenzel Jakobc769fce2016-03-03 12:03:30 +01001507Sometimes it may be necessary to pass a null pointer value as a default
1508argument. In this case, remember to cast it to the underlying type in question,
1509like so:
1510
1511.. code-block:: cpp
1512
1513 py::class_<MyClass>("MyClass")
1514 .def("myFunction", py::arg("arg") = (SomeType *) nullptr);
1515
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001516Binding functions that accept arbitrary numbers of arguments and keywords arguments
1517===================================================================================
1518
1519Python provides a useful mechanism to define functions that accept arbitrary
1520numbers of arguments and keyword arguments:
1521
1522.. code-block:: cpp
1523
1524 def generic(*args, **kwargs):
1525 # .. do something with args and kwargs
1526
1527Such functions can also be created using pybind11:
1528
1529.. code-block:: cpp
1530
1531 void generic(py::args args, py::kwargs kwargs) {
1532 /// .. do something with args
1533 if (kwargs)
1534 /// .. do something with kwargs
1535 }
1536
1537 /// Binding code
1538 m.def("generic", &generic);
1539
1540(See ``example/example11.cpp``). The class ``py::args`` derives from
1541``py::list`` and ``py::kwargs`` derives from ``py::dict`` Note that the
1542``kwargs`` argument is invalid if no keyword arguments were actually provided.
1543Please refer to the other examples for details on how to iterate over these,
1544and on how to cast their entries into C++ objects.
1545
Wenzel Jakob2dfbade2016-01-17 22:36:37 +01001546Partitioning code over multiple extension modules
1547=================================================
1548
Wenzel Jakob90d2f5e2016-04-11 14:30:11 +02001549It's straightforward to split binding code over multiple extension modules,
1550while referencing types that are declared elsewhere. Everything "just" works
1551without any special precautions. One exception to this rule occurs when
1552extending a type declared in another extension module. Recall the basic example
1553from Section :ref:`inheritance`.
Wenzel Jakob2dfbade2016-01-17 22:36:37 +01001554
1555.. code-block:: cpp
1556
1557 py::class_<Pet> pet(m, "Pet");
1558 pet.def(py::init<const std::string &>())
1559 .def_readwrite("name", &Pet::name);
1560
1561 py::class_<Dog>(m, "Dog", pet /* <- specify parent */)
1562 .def(py::init<const std::string &>())
1563 .def("bark", &Dog::bark);
1564
1565Suppose now that ``Pet`` bindings are defined in a module named ``basic``,
1566whereas the ``Dog`` bindings are defined somewhere else. The challenge is of
1567course that the variable ``pet`` is not available anymore though it is needed
1568to indicate the inheritance relationship to the constructor of ``class_<Dog>``.
1569However, it can be acquired as follows:
1570
1571.. code-block:: cpp
1572
1573 py::object pet = (py::object) py::module::import("basic").attr("Pet");
1574
1575 py::class_<Dog>(m, "Dog", pet)
1576 .def(py::init<const std::string &>())
1577 .def("bark", &Dog::bark);
1578
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001579Alternatively, we can rely on the ``base`` tag, which performs an automated
1580lookup of the corresponding Python type. However, this also requires invoking
1581the ``import`` function once to ensure that the pybind11 binding code of the
1582module ``basic`` has been executed.
1583
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001584.. code-block:: cpp
1585
1586 py::module::import("basic");
1587
1588 py::class_<Dog>(m, "Dog", py::base<Pet>())
1589 .def(py::init<const std::string &>())
1590 .def("bark", &Dog::bark);
Wenzel Jakobeda978e2016-03-15 15:05:40 +01001591
Wenzel Jakob978e3762016-04-07 18:00:41 +02001592Naturally, both methods will fail when there are cyclic dependencies.
1593
Wenzel Jakob90d2f5e2016-04-11 14:30:11 +02001594Note that compiling code which has its default symbol visibility set to
1595*hidden* (e.g. via the command line flag ``-fvisibility=hidden`` on GCC/Clang) can interfere with the
1596ability to access types defined in another extension module. Workarounds
1597include changing the global symbol visibility (not recommended, because it will
1598lead unnecessarily large binaries) or manually exporting types that are
1599accessed by multiple extension modules:
1600
1601.. code-block:: cpp
1602
1603 #ifdef _WIN32
1604 # define EXPORT_TYPE __declspec(dllexport)
1605 #else
1606 # define EXPORT_TYPE __attribute__ ((visibility("default")))
1607 #endif
1608
1609 class EXPORT_TYPE Dog : public Animal {
1610 ...
1611 };
1612
1613
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001614Pickling support
1615================
1616
1617Python's ``pickle`` module provides a powerful facility to serialize and
1618de-serialize a Python object graph into a binary data stream. To pickle and
Wenzel Jakob3d0e6ff2016-04-13 11:48:10 +02001619unpickle C++ classes using pybind11, two additional functions must be provided.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001620Suppose the class in question has the following signature:
1621
1622.. code-block:: cpp
1623
1624 class Pickleable {
1625 public:
1626 Pickleable(const std::string &value) : m_value(value) { }
1627 const std::string &value() const { return m_value; }
1628
1629 void setExtra(int extra) { m_extra = extra; }
1630 int extra() const { return m_extra; }
1631 private:
1632 std::string m_value;
1633 int m_extra = 0;
1634 };
1635
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001636The binding code including the requisite ``__setstate__`` and ``__getstate__`` methods [#f3]_
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001637looks as follows:
1638
1639.. code-block:: cpp
1640
1641 py::class_<Pickleable>(m, "Pickleable")
1642 .def(py::init<std::string>())
1643 .def("value", &Pickleable::value)
1644 .def("extra", &Pickleable::extra)
1645 .def("setExtra", &Pickleable::setExtra)
1646 .def("__getstate__", [](const Pickleable &p) {
1647 /* Return a tuple that fully encodes the state of the object */
1648 return py::make_tuple(p.value(), p.extra());
1649 })
1650 .def("__setstate__", [](Pickleable &p, py::tuple t) {
1651 if (t.size() != 2)
1652 throw std::runtime_error("Invalid state!");
1653
Wenzel Jakobd40885a2016-04-13 13:30:05 +02001654 /* Invoke the in-place constructor. Note that this is needed even
1655 when the object just has a trivial default constructor */
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001656 new (&p) Pickleable(t[0].cast<std::string>());
1657
1658 /* Assign any additional state */
1659 p.setExtra(t[1].cast<int>());
1660 });
1661
1662An instance can now be pickled as follows:
1663
1664.. code-block:: python
1665
1666 try:
1667 import cPickle as pickle # Use cPickle on Python 2.7
1668 except ImportError:
1669 import pickle
1670
1671 p = Pickleable("test_value")
1672 p.setExtra(15)
Wenzel Jakob81e09752016-04-30 23:13:03 +02001673 data = pickle.dumps(p, 2)
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001674
Wenzel Jakob81e09752016-04-30 23:13:03 +02001675Note that only the cPickle module is supported on Python 2.7. The second
1676argument to ``dumps`` is also crucial: it selects the pickle protocol version
16772, since the older version 1 is not supported. Newer versions are also fine—for
1678instance, specify ``-1`` to always use the latest available version. Beware:
1679failure to follow these instructions will cause important pybind11 memory
1680allocation routines to be skipped during unpickling, which will likely lead to
1681memory corruption and/or segmentation faults.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001682
1683.. seealso::
1684
1685 The file :file:`example/example15.cpp` contains a complete example that
1686 demonstrates how to pickle and unpickle types using pybind11 in more detail.
1687
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001688.. [#f3] http://docs.python.org/3/library/pickle.html#pickling-class-instances
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001689
1690Generating documentation using Sphinx
1691=====================================
1692
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001693Sphinx [#f4]_ has the ability to inspect the signatures and documentation
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001694strings in pybind11-based extension modules to automatically generate beautiful
Wenzel Jakobca8dc082016-06-03 14:24:17 +02001695documentation in a variety formats. The python_example repository [#f5]_ contains a
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001696simple example repository which uses this approach.
1697
1698There are two potential gotchas when using this approach: first, make sure that
1699the resulting strings do not contain any :kbd:`TAB` characters, which break the
1700docstring parsing routines. You may want to use C++11 raw string literals,
1701which are convenient for multi-line comments. Conveniently, any excess
1702indentation will be automatically be removed by Sphinx. However, for this to
1703work, it is important that all lines are indented consistently, i.e.:
1704
1705.. code-block:: cpp
1706
1707 // ok
1708 m.def("foo", &foo, R"mydelimiter(
1709 The foo function
1710
1711 Parameters
1712 ----------
1713 )mydelimiter");
1714
1715 // *not ok*
1716 m.def("foo", &foo, R"mydelimiter(The foo function
1717
1718 Parameters
1719 ----------
1720 )mydelimiter");
1721
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001722.. [#f4] http://www.sphinx-doc.org
Wenzel Jakobca8dc082016-06-03 14:24:17 +02001723.. [#f5] http://github.com/pybind/python_example
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001724
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001725Evaluating Python expressions from strings and files
1726====================================================
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001727
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001728pybind11 provides the :func:`eval` and :func:`eval_file` functions to evaluate
1729Python expressions and statements. The following example illustrates how they
1730can be used.
1731
1732Both functions accept a template parameter that describes how the argument
1733should be interpreted. Possible choices include ``eval_expr`` (isolated
1734expression), ``eval_single_statement`` (a single statement, return value is
1735always ``none``), and ``eval_statements`` (sequence of statements, return value
1736is always ``none``).
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001737
1738.. code-block:: cpp
1739
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001740 // At beginning of file
1741 #include <pybind11/eval.h>
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001742
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001743 ...
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001744
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001745 // Evaluate in scope of main module
1746 py::object scope = py::module::import("__main__").attr("__dict__");
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001747
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001748 // Evaluate an isolated expression
1749 int result = py::eval("my_variable + 10", scope).cast<int>();
1750
1751 // Evaluate a sequence of statements
1752 py::eval<py::eval_statements>(
1753 "print('Hello')\n"
1754 "print('world!');",
1755 scope);
1756
1757 // Evaluate the statements in an separate Python file on disk
1758 py::eval_file("script.py", scope);
1759