blob: 1c6f6e0a946354aef881be6eaded3743b614b9b3 [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
44 std::string toString() const { return "[" + std::to_string(x) + ", " + std::to_string(y) + "]"; }
45
46 Vector2 operator+(const Vector2 &v) const { return Vector2(x + v.x, y + v.y); }
47 Vector2 operator*(float value) const { return Vector2(x * value, y * value); }
48 Vector2& operator+=(const Vector2 &v) { x += v.x; y += v.y; return *this; }
49 Vector2& operator*=(float v) { x *= v; y *= v; return *this; }
50
51 friend Vector2 operator*(float f, const Vector2 &v) { return Vector2(f * v.x, f * v.y); }
52
53 private:
54 float x, y;
55 };
56
57The following snippet shows how the above operators can be conveniently exposed
58to Python.
59
60.. code-block:: cpp
61
Wenzel Jakob8f4eb002015-10-15 18:13:33 +020062 #include <pybind11/operators.h>
Wenzel Jakob93296692015-10-13 23:21:54 +020063
Wenzel Jakobb1b71402015-10-18 16:48:30 +020064 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +020065 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +020066
67 py::class_<Vector2>(m, "Vector2")
68 .def(py::init<float, float>())
69 .def(py::self + py::self)
70 .def(py::self += py::self)
71 .def(py::self *= float())
72 .def(float() * py::self)
73 .def("__repr__", &Vector2::toString);
74
75 return m.ptr();
76 }
77
78Note that a line like
79
80.. code-block:: cpp
81
82 .def(py::self * float())
83
84is really just short hand notation for
85
86.. code-block:: cpp
87
88 .def("__mul__", [](const Vector2 &a, float b) {
89 return a * b;
90 })
91
92This can be useful for exposing additional operators that don't exist on the
93C++ side, or to perform other types of customization.
94
95.. note::
96
97 To use the more convenient ``py::self`` notation, the additional
Wenzel Jakob8f4eb002015-10-15 18:13:33 +020098 header file :file:`pybind11/operators.h` must be included.
Wenzel Jakob93296692015-10-13 23:21:54 +020099
100.. seealso::
101
102 The file :file:`example/example3.cpp` contains a complete example that
103 demonstrates how to work with overloaded operators in more detail.
104
105Callbacks and passing anonymous functions
106=========================================
107
108The C++11 standard brought lambda functions and the generic polymorphic
109function wrapper ``std::function<>`` to the C++ programming language, which
110enable powerful new ways of working with functions. Lambda functions come in
111two flavors: stateless lambda function resemble classic function pointers that
112link to an anonymous piece of code, while stateful lambda functions
113additionally depend on captured variables that are stored in an anonymous
114*lambda closure object*.
115
116Here is a simple example of a C++ function that takes an arbitrary function
117(stateful or stateless) with signature ``int -> int`` as an argument and runs
118it with the value 10.
119
120.. code-block:: cpp
121
122 int func_arg(const std::function<int(int)> &f) {
123 return f(10);
124 }
125
126The example below is more involved: it takes a function of signature ``int -> int``
127and returns another function of the same kind. The return value is a stateful
128lambda function, which stores the value ``f`` in the capture object and adds 1 to
129its return value upon execution.
130
131.. code-block:: cpp
132
133 std::function<int(int)> func_ret(const std::function<int(int)> &f) {
134 return [f](int i) {
135 return f(i) + 1;
136 };
137 }
138
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200139After including the extra header file :file:`pybind11/functional.h`, it is almost
Wenzel Jakob93296692015-10-13 23:21:54 +0200140trivial to generate binding code for both of these functions.
141
142.. code-block:: cpp
143
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200144 #include <pybind11/functional.h>
Wenzel Jakob93296692015-10-13 23:21:54 +0200145
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200146 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200147 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200148
149 m.def("func_arg", &func_arg);
150 m.def("func_ret", &func_ret);
151
152 return m.ptr();
153 }
154
155The following interactive session shows how to call them from Python.
156
157.. code-block:: python
158
159 $ python
160 >>> import example
161 >>> def square(i):
162 ... return i * i
163 ...
164 >>> example.func_arg(square)
165 100L
166 >>> square_plus_1 = example.func_ret(square)
167 >>> square_plus_1(4)
168 17L
169 >>>
170
171.. note::
172
173 This functionality is very useful when generating bindings for callbacks in
174 C++ libraries (e.g. a graphical user interface library).
175
176 The file :file:`example/example5.cpp` contains a complete example that
177 demonstrates how to work with callbacks and anonymous functions in more detail.
178
Wenzel Jakoba4175d62015-11-17 08:30:34 +0100179.. warning::
180
181 Keep in mind that passing a function from C++ to Python (or vice versa)
182 will instantiate a piece of wrapper code that translates function
183 invocations between the two languages. Copying the same function back and
184 forth between Python and C++ many times in a row will cause these wrappers
185 to accumulate, which can decrease performance.
186
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200187Overriding virtual functions in Python
188======================================
189
Wenzel Jakob93296692015-10-13 23:21:54 +0200190Suppose that a C++ class or interface has a virtual function that we'd like to
191to override from within Python (we'll focus on the class ``Animal``; ``Dog`` is
192given as a specific example of how one would do this with traditional C++
193code).
194
195.. code-block:: cpp
196
197 class Animal {
198 public:
199 virtual ~Animal() { }
200 virtual std::string go(int n_times) = 0;
201 };
202
203 class Dog : public Animal {
204 public:
205 std::string go(int n_times) {
206 std::string result;
207 for (int i=0; i<n_times; ++i)
208 result += "woof! ";
209 return result;
210 }
211 };
212
213Let's also suppose that we are given a plain function which calls the
214function ``go()`` on an arbitrary ``Animal`` instance.
215
216.. code-block:: cpp
217
218 std::string call_go(Animal *animal) {
219 return animal->go(3);
220 }
221
222Normally, the binding code for these classes would look as follows:
223
224.. code-block:: cpp
225
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200226 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200227 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200228
229 py::class_<Animal> animal(m, "Animal");
230 animal
231 .def("go", &Animal::go);
232
233 py::class_<Dog>(m, "Dog", animal)
234 .def(py::init<>());
235
236 m.def("call_go", &call_go);
237
238 return m.ptr();
239 }
240
241However, these bindings are impossible to extend: ``Animal`` is not
242constructible, and we clearly require some kind of "trampoline" that
243redirects virtual calls back to Python.
244
245Defining a new type of ``Animal`` from within Python is possible but requires a
246helper class that is defined as follows:
247
248.. code-block:: cpp
249
250 class PyAnimal : public Animal {
251 public:
252 /* Inherit the constructors */
253 using Animal::Animal;
254
255 /* Trampoline (need one for each virtual function) */
256 std::string go(int n_times) {
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200257 PYBIND11_OVERLOAD_PURE(
Wenzel Jakob93296692015-10-13 23:21:54 +0200258 std::string, /* Return type */
259 Animal, /* Parent class */
260 go, /* Name of function */
261 n_times /* Argument(s) */
262 );
263 }
264 };
265
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200266The macro :func:`PYBIND11_OVERLOAD_PURE` should be used for pure virtual
267functions, and :func:`PYBIND11_OVERLOAD` should be used for functions which have
Wenzel Jakob93296692015-10-13 23:21:54 +0200268a default implementation. The binding code also needs a few minor adaptations
269(highlighted):
270
271.. code-block:: cpp
272 :emphasize-lines: 4,6,7
273
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200274 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200275 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200276
277 py::class_<PyAnimal> animal(m, "Animal");
278 animal
279 .alias<Animal>()
280 .def(py::init<>())
281 .def("go", &Animal::go);
282
283 py::class_<Dog>(m, "Dog", animal)
284 .def(py::init<>());
285
286 m.def("call_go", &call_go);
287
288 return m.ptr();
289 }
290
291Importantly, the trampoline helper class is used as the template argument to
292:class:`class_`, and a call to :func:`class_::alias` informs the binding
293generator that this is merely an alias for the underlying type ``Animal``.
294Following this, we are able to define a constructor as usual.
295
296The Python session below shows how to override ``Animal::go`` and invoke it via
297a virtual method call.
298
Wenzel Jakobde3ad072016-02-02 11:38:21 +0100299.. code-block:: python
Wenzel Jakob93296692015-10-13 23:21:54 +0200300
301 >>> from example import *
302 >>> d = Dog()
303 >>> call_go(d)
304 u'woof! woof! woof! '
305 >>> class Cat(Animal):
306 ... def go(self, n_times):
307 ... return "meow! " * n_times
308 ...
309 >>> c = Cat()
310 >>> call_go(c)
311 u'meow! meow! meow! '
312
313.. seealso::
314
315 The file :file:`example/example12.cpp` contains a complete example that
316 demonstrates how to override virtual functions using pybind11 in more
317 detail.
318
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100319
320Global Interpreter Lock (GIL)
321=============================
322
323The classes :class:`gil_scoped_release` and :class:`gil_scoped_acquire` can be
324used to acquire and release the global interpreter lock in the body of a C++
325function call. In this way, long-running C++ code can be parallelized using
326multiple Python threads. Taking the previous section as an example, this could
327be realized as follows (important changes highlighted):
328
329.. code-block:: cpp
330 :emphasize-lines: 8,9,33,34
331
332 class PyAnimal : public Animal {
333 public:
334 /* Inherit the constructors */
335 using Animal::Animal;
336
337 /* Trampoline (need one for each virtual function) */
338 std::string go(int n_times) {
339 /* Acquire GIL before calling Python code */
Wenzel Jakoba4caa852015-12-14 12:39:02 +0100340 py::gil_scoped_acquire acquire;
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100341
342 PYBIND11_OVERLOAD_PURE(
343 std::string, /* Return type */
344 Animal, /* Parent class */
345 go, /* Name of function */
346 n_times /* Argument(s) */
347 );
348 }
349 };
350
351 PYBIND11_PLUGIN(example) {
352 py::module m("example", "pybind11 example plugin");
353
354 py::class_<PyAnimal> animal(m, "Animal");
355 animal
356 .alias<Animal>()
357 .def(py::init<>())
358 .def("go", &Animal::go);
359
360 py::class_<Dog>(m, "Dog", animal)
361 .def(py::init<>());
362
363 m.def("call_go", [](Animal *animal) -> std::string {
364 /* Release GIL before calling into (potentially long-running) C++ code */
Wenzel Jakoba4caa852015-12-14 12:39:02 +0100365 py::gil_scoped_release release;
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100366 return call_go(animal);
367 });
368
369 return m.ptr();
370 }
371
Wenzel Jakob93296692015-10-13 23:21:54 +0200372Passing STL data structures
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200373===========================
374
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200375When including the additional header file :file:`pybind11/stl.h`, conversions
Wenzel Jakob978e3762016-04-07 18:00:41 +0200376between ``std::vector<>``, ``std::list<>``, ``std::set<>``, and ``std::map<>``
377and the Python ``list``, ``set`` and ``dict`` data structures are automatically
378enabled. The types ``std::pair<>`` and ``std::tuple<>`` are already supported
379out of the box with just the core :file:`pybind11/pybind11.h` header.
Wenzel Jakob93296692015-10-13 23:21:54 +0200380
381.. note::
382
Wenzel Jakob44db04f2015-12-14 12:40:45 +0100383 Arbitrary nesting of any of these types is supported.
Wenzel Jakob93296692015-10-13 23:21:54 +0200384
385.. seealso::
386
387 The file :file:`example/example2.cpp` contains a complete example that
388 demonstrates how to pass STL data types in more detail.
389
Wenzel Jakobb2825952016-04-13 23:33:00 +0200390Binding sequence data types, iterators, the slicing protocol, etc.
391==================================================================
Wenzel Jakob93296692015-10-13 23:21:54 +0200392
393Please refer to the supplemental example for details.
394
395.. seealso::
396
397 The file :file:`example/example6.cpp` contains a complete example that
398 shows how to bind a sequence data type, including length queries
399 (``__len__``), iterators (``__iter__``), the slicing protocol and other
400 kinds of useful operations.
401
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200402Return value policies
403=====================
404
Wenzel Jakob93296692015-10-13 23:21:54 +0200405Python and C++ use wildly different ways of managing the memory and lifetime of
406objects managed by them. This can lead to issues when creating bindings for
407functions that return a non-trivial type. Just by looking at the type
408information, it is not clear whether Python should take charge of the returned
409value and eventually free its resources, or if this is handled on the C++ side.
410For this reason, pybind11 provides a several `return value policy` annotations
411that can be passed to the :func:`module::def` and :func:`class_::def`
Wenzel Jakob61d67f02015-12-14 12:53:06 +0100412functions. The default policy is :enum:`return_value_policy::automatic`.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200413
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200414+--------------------------------------------------+----------------------------------------------------------------------------+
415| Return value policy | Description |
416+==================================================+============================================================================+
417| :enum:`return_value_policy::automatic` | This is the default return value policy, which falls back to the policy |
418| | :enum:`return_value_policy::take_ownership` when the return value is a |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200419| | pointer. Otherwise, it uses :enum:`return_value::move` or |
420| | :enum:`return_value::copy` for rvalue and lvalue references, respectively. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200421| | See below for a description of what all of these different policies do. |
422+--------------------------------------------------+----------------------------------------------------------------------------+
423| :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 +0200424| | return value is a pointer. You probably won't need to use this. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200425+--------------------------------------------------+----------------------------------------------------------------------------+
426| :enum:`return_value_policy::take_ownership` | Reference an existing object (i.e. do not create a new copy) and take |
427| | ownership. Python will call the destructor and delete operator when the |
428| | object's reference count reaches zero. Undefined behavior ensues when the |
429| | C++ side does the same.. |
430+--------------------------------------------------+----------------------------------------------------------------------------+
431| :enum:`return_value_policy::copy` | Create a new copy of the returned object, which will be owned by Python. |
432| | This policy is comparably safe because the lifetimes of the two instances |
433| | are decoupled. |
434+--------------------------------------------------+----------------------------------------------------------------------------+
435| :enum:`return_value_policy::move` | Use ``std::move`` to move the return value contents into a new instance |
436| | that will be owned by Python. This policy is comparably safe because the |
437| | lifetimes of the two instances (move source and destination) are decoupled.|
438+--------------------------------------------------+----------------------------------------------------------------------------+
439| :enum:`return_value_policy::reference` | Reference an existing object, but do not take ownership. The C++ side is |
440| | responsible for managing the object's lifetime and deallocating it when |
441| | it is no longer used. Warning: undefined behavior will ensue when the C++ |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200442| | side deletes an object that is still referenced and used by Python. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200443+--------------------------------------------------+----------------------------------------------------------------------------+
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200444| :enum:`return_value_policy::reference_internal` | This policy only applies to methods and properties. It references the |
445| | object without taking ownership similar to the above |
446| | :enum:`return_value_policy::reference` policy. In contrast to that policy, |
447| | the function or property's implicit ``this`` argument (called the *parent*)|
448| | is considered to be the the owner of the return value (the *child*). |
449| | pybind11 then couples the lifetime of the parent to the child via a |
450| | reference relationship that ensures that the parent cannot be garbage |
451| | collected while Python is still using the child. More advanced variations |
452| | of this scheme are also possible using combinations of |
453| | :enum:`return_value_policy::reference` and the :class:`keep_alive` call |
454| | policy described next. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200455+--------------------------------------------------+----------------------------------------------------------------------------+
Wenzel Jakob93296692015-10-13 23:21:54 +0200456
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200457The following example snippet shows a use case of the
Wenzel Jakob93296692015-10-13 23:21:54 +0200458:enum:`return_value_policy::reference_internal` policy.
459
460.. code-block:: cpp
461
462 class Example {
463 public:
464 Internal &get_internal() { return internal; }
465 private:
466 Internal internal;
467 };
468
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200469 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200470 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200471
472 py::class_<Example>(m, "Example")
473 .def(py::init<>())
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200474 .def("get_internal", &Example::get_internal, "Return the internal data",
475 py::return_value_policy::reference_internal);
Wenzel Jakob93296692015-10-13 23:21:54 +0200476
477 return m.ptr();
478 }
479
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200480.. warning::
481
482 Code with invalid call policies might access unitialized memory or free
483 data structures multiple times, which can lead to hard-to-debug
484 non-determinism and segmentation faults, hence it is worth spending the
485 time to understand all the different options in the table above.
486
487.. note::
488
489 The next section on :ref:`call_policies` discusses *call policies* that can be
490 specified *in addition* to a return value policy from the list above. Call
491 policies indicate reference relationships that can involve both return values
492 and parameters of functions.
493
494.. note::
495
496 As an alternative to elaborate call policies and lifetime management logic,
497 consider using smart pointers (see the section on :ref:`smart_pointers` for
498 details). Smart pointers can tell whether an object is still referenced from
499 C++ or Python, which generally eliminates the kinds of inconsistencies that
500 can lead to crashes or undefined behavior. For functions returning smart
501 pointers, it is not necessary to specify a return value policy.
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100502
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200503.. _call_policies:
504
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100505Additional call policies
506========================
507
508In addition to the above return value policies, further `call policies` can be
509specified to indicate dependencies between parameters. There is currently just
510one policy named ``keep_alive<Nurse, Patient>``, which indicates that the
511argument with index ``Patient`` should be kept alive at least until the
512argument with index ``Nurse`` is freed by the garbage collector; argument
513indices start at one, while zero refers to the return value. Arbitrarily many
514call policies can be specified.
515
516For instance, binding code for a a list append operation that ties the lifetime
517of the newly added element to the underlying container might be declared as
518follows:
519
520.. code-block:: cpp
521
522 py::class_<List>(m, "List")
523 .def("append", &List::append, py::keep_alive<1, 2>());
524
525.. note::
526
527 ``keep_alive`` is analogous to the ``with_custodian_and_ward`` (if Nurse,
528 Patient != 0) and ``with_custodian_and_ward_postcall`` (if Nurse/Patient ==
529 0) policies from Boost.Python.
530
Wenzel Jakob61587162016-01-18 22:38:52 +0100531.. seealso::
532
533 The file :file:`example/example13.cpp` contains a complete example that
534 demonstrates using :class:`keep_alive` in more detail.
535
Wenzel Jakob93296692015-10-13 23:21:54 +0200536Implicit type conversions
537=========================
538
539Suppose that instances of two types ``A`` and ``B`` are used in a project, and
540that an ``A`` can easily be converted into a an instance of type ``B`` (examples of this
541could be a fixed and an arbitrary precision number type).
542
543.. code-block:: cpp
544
545 py::class_<A>(m, "A")
546 /// ... members ...
547
548 py::class_<B>(m, "B")
549 .def(py::init<A>())
550 /// ... members ...
551
552 m.def("func",
553 [](const B &) { /* .... */ }
554 );
555
556To invoke the function ``func`` using a variable ``a`` containing an ``A``
557instance, we'd have to write ``func(B(a))`` in Python. On the other hand, C++
558will automatically apply an implicit type conversion, which makes it possible
559to directly write ``func(a)``.
560
561In this situation (i.e. where ``B`` has a constructor that converts from
562``A``), the following statement enables similar implicit conversions on the
563Python side:
564
565.. code-block:: cpp
566
567 py::implicitly_convertible<A, B>();
568
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200569Unique pointers
570===============
571
572Given a class ``Example`` with Python bindings, it's possible to return
573instances wrapped in C++11 unique pointers, like so
574
575.. code-block:: cpp
576
577 std::unique_ptr<Example> create_example() { return std::unique_ptr<Example>(new Example()); }
578
579.. code-block:: cpp
580
581 m.def("create_example", &create_example);
582
583In other words, there is nothing special that needs to be done. While returning
584unique pointers in this way is allowed, it is *illegal* to use them as function
585arguments. For instance, the following function signature cannot be processed
586by pybind11.
587
588.. code-block:: cpp
589
590 void do_something_with_example(std::unique_ptr<Example> ex) { ... }
591
592The above signature would imply that Python needs to give up ownership of an
593object that is passed to this function, which is generally not possible (for
594instance, the object might be referenced elsewhere).
595
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200596.. _smart_pointers:
597
Wenzel Jakob93296692015-10-13 23:21:54 +0200598Smart pointers
599==============
600
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200601This section explains how to pass values that are wrapped in "smart" pointer
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200602types with internal reference counting. For the simpler C++11 unique pointers,
603refer to the previous section.
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200604
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200605The binding generator for classes, :class:`class_`, takes an optional second
Wenzel Jakob93296692015-10-13 23:21:54 +0200606template type, which denotes a special *holder* type that is used to manage
607references to the object. When wrapping a type named ``Type``, the default
608value of this template parameter is ``std::unique_ptr<Type>``, which means that
609the object is deallocated when Python's reference count goes to zero.
610
Wenzel Jakob1853b652015-10-18 15:38:50 +0200611It is possible to switch to other types of reference counting wrappers or smart
612pointers, which is useful in codebases that rely on them. For instance, the
613following snippet causes ``std::shared_ptr`` to be used instead.
Wenzel Jakob93296692015-10-13 23:21:54 +0200614
615.. code-block:: cpp
616
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100617 py::class_<Example, std::shared_ptr<Example> /* <- holder type */> obj(m, "Example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100618
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100619Note that any particular class can only be associated with a single holder type.
Wenzel Jakob93296692015-10-13 23:21:54 +0200620
Wenzel Jakob1853b652015-10-18 15:38:50 +0200621To enable transparent conversions for functions that take shared pointers as an
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100622argument or that return them, a macro invocation similar to the following must
Wenzel Jakob1853b652015-10-18 15:38:50 +0200623be declared at the top level before any binding code:
624
625.. code-block:: cpp
626
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200627 PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr<T>);
Wenzel Jakob1853b652015-10-18 15:38:50 +0200628
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100629.. note::
Wenzel Jakob61d67f02015-12-14 12:53:06 +0100630
631 The first argument of :func:`PYBIND11_DECLARE_HOLDER_TYPE` should be a
632 placeholder name that is used as a template parameter of the second
633 argument. Thus, feel free to use any identifier, but use it consistently on
634 both sides; also, don't use the name of a type that already exists in your
635 codebase.
636
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100637One potential stumbling block when using holder types is that they need to be
638applied consistently. Can you guess what's broken about the following binding
639code?
Wenzel Jakob6e213c92015-11-24 23:05:58 +0100640
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100641.. code-block:: cpp
Wenzel Jakob6e213c92015-11-24 23:05:58 +0100642
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100643 class Child { };
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100644
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100645 class Parent {
646 public:
647 Parent() : child(std::make_shared<Child>()) { }
648 Child *get_child() { return child.get(); } /* Hint: ** DON'T DO THIS ** */
649 private:
650 std::shared_ptr<Child> child;
651 };
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100652
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100653 PYBIND11_PLUGIN(example) {
654 py::module m("example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100655
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100656 py::class_<Child, std::shared_ptr<Child>>(m, "Child");
657
658 py::class_<Parent, std::shared_ptr<Parent>>(m, "Parent")
659 .def(py::init<>())
660 .def("get_child", &Parent::get_child);
661
662 return m.ptr();
663 }
664
665The following Python code will cause undefined behavior (and likely a
666segmentation fault).
667
668.. code-block:: python
669
670 from example import Parent
671 print(Parent().get_child())
672
673The problem is that ``Parent::get_child()`` returns a pointer to an instance of
674``Child``, but the fact that this instance is already managed by
675``std::shared_ptr<...>`` is lost when passing raw pointers. In this case,
676pybind11 will create a second independent ``std::shared_ptr<...>`` that also
677claims ownership of the pointer. In the end, the object will be freed **twice**
678since these shared pointers have no way of knowing about each other.
679
680There are two ways to resolve this issue:
681
6821. For types that are managed by a smart pointer class, never use raw pointers
683 in function arguments or return values. In other words: always consistently
684 wrap pointers into their designated holder types (such as
685 ``std::shared_ptr<...>``). In this case, the signature of ``get_child()``
686 should be modified as follows:
687
688.. code-block:: cpp
689
690 std::shared_ptr<Child> get_child() { return child; }
691
6922. Adjust the definition of ``Child`` by specifying
693 ``std::enable_shared_from_this<T>`` (see cppreference_ for details) as a
694 base class. This adds a small bit of information to ``Child`` that allows
695 pybind11 to realize that there is already an existing
696 ``std::shared_ptr<...>`` and communicate with it. In this case, the
697 declaration of ``Child`` should look as follows:
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100698
Wenzel Jakob6e213c92015-11-24 23:05:58 +0100699.. _cppreference: http://en.cppreference.com/w/cpp/memory/enable_shared_from_this
700
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100701.. code-block:: cpp
702
703 class Child : public std::enable_shared_from_this<Child> { };
704
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100705.. seealso::
706
707 The file :file:`example/example8.cpp` contains a complete example that
708 demonstrates how to work with custom reference-counting holder types in
709 more detail.
710
Wenzel Jakob93296692015-10-13 23:21:54 +0200711.. _custom_constructors:
712
713Custom constructors
714===================
715
716The syntax for binding constructors was previously introduced, but it only
717works when a constructor with the given parameters actually exists on the C++
718side. To extend this to more general cases, let's take a look at what actually
719happens under the hood: the following statement
720
721.. code-block:: cpp
722
723 py::class_<Example>(m, "Example")
724 .def(py::init<int>());
725
726is short hand notation for
727
728.. code-block:: cpp
729
730 py::class_<Example>(m, "Example")
731 .def("__init__",
732 [](Example &instance, int arg) {
733 new (&instance) Example(arg);
734 }
735 );
736
737In other words, :func:`init` creates an anonymous function that invokes an
738in-place constructor. Memory allocation etc. is already take care of beforehand
739within pybind11.
740
741Catching and throwing exceptions
742================================
743
744When C++ code invoked from Python throws an ``std::exception``, it is
745automatically converted into a Python ``Exception``. pybind11 defines multiple
746special exception classes that will map to different types of Python
747exceptions:
748
Wenzel Jakob978e3762016-04-07 18:00:41 +0200749+--------------------------------------+------------------------------+
750| C++ exception type | Python exception type |
751+======================================+==============================+
752| :class:`std::exception` | ``RuntimeError`` |
753+--------------------------------------+------------------------------+
754| :class:`std::bad_alloc` | ``MemoryError`` |
755+--------------------------------------+------------------------------+
756| :class:`std::domain_error` | ``ValueError`` |
757+--------------------------------------+------------------------------+
758| :class:`std::invalid_argument` | ``ValueError`` |
759+--------------------------------------+------------------------------+
760| :class:`std::length_error` | ``ValueError`` |
761+--------------------------------------+------------------------------+
762| :class:`std::out_of_range` | ``ValueError`` |
763+--------------------------------------+------------------------------+
764| :class:`std::range_error` | ``ValueError`` |
765+--------------------------------------+------------------------------+
766| :class:`pybind11::stop_iteration` | ``StopIteration`` (used to |
767| | implement custom iterators) |
768+--------------------------------------+------------------------------+
769| :class:`pybind11::index_error` | ``IndexError`` (used to |
770| | indicate out of bounds |
771| | accesses in ``__getitem__``, |
772| | ``__setitem__``, etc.) |
773+--------------------------------------+------------------------------+
774| :class:`pybind11::error_already_set` | Indicates that the Python |
775| | exception flag has already |
776| | been initialized |
777+--------------------------------------+------------------------------+
Wenzel Jakob93296692015-10-13 23:21:54 +0200778
779When a Python function invoked from C++ throws an exception, it is converted
780into a C++ exception of type :class:`error_already_set` whose string payload
781contains a textual summary.
782
783There is also a special exception :class:`cast_error` that is thrown by
784:func:`handle::call` when the input arguments cannot be converted to Python
785objects.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200786
787Buffer protocol
788===============
789
790Python supports an extremely general and convenient approach for exchanging
Wenzel Jakob978e3762016-04-07 18:00:41 +0200791data between plugin libraries. Types can expose a buffer view [#f1]_,
792which provides fast direct access to the raw internal representation. Suppose
793we want to bind the following simplistic Matrix class:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200794
795.. code-block:: cpp
796
797 class Matrix {
798 public:
799 Matrix(size_t rows, size_t cols) : m_rows(rows), m_cols(cols) {
800 m_data = new float[rows*cols];
801 }
802 float *data() { return m_data; }
803 size_t rows() const { return m_rows; }
804 size_t cols() const { return m_cols; }
805 private:
806 size_t m_rows, m_cols;
807 float *m_data;
808 };
809
810The following binding code exposes the ``Matrix`` contents as a buffer object,
811making it possible to cast Matrixes into NumPy arrays. It is even possible to
812completely avoid copy operations with Python expressions like
813``np.array(matrix_instance, copy = False)``.
814
815.. code-block:: cpp
816
817 py::class_<Matrix>(m, "Matrix")
818 .def_buffer([](Matrix &m) -> py::buffer_info {
819 return py::buffer_info(
820 m.data(), /* Pointer to buffer */
821 sizeof(float), /* Size of one scalar */
822 py::format_descriptor<float>::value(), /* Python struct-style format descriptor */
823 2, /* Number of dimensions */
824 { m.rows(), m.cols() }, /* Buffer dimensions */
825 { sizeof(float) * m.rows(), /* Strides (in bytes) for each index */
826 sizeof(float) }
827 );
828 });
829
830The snippet above binds a lambda function, which can create ``py::buffer_info``
831description records on demand describing a given matrix. The contents of
832``py::buffer_info`` mirror the Python buffer protocol specification.
833
834.. code-block:: cpp
835
836 struct buffer_info {
837 void *ptr;
838 size_t itemsize;
839 std::string format;
840 int ndim;
841 std::vector<size_t> shape;
842 std::vector<size_t> strides;
843 };
844
845To create a C++ function that can take a Python buffer object as an argument,
846simply use the type ``py::buffer`` as one of its arguments. Buffers can exist
847in a great variety of configurations, hence some safety checks are usually
848necessary in the function body. Below, you can see an basic example on how to
849define a custom constructor for the Eigen double precision matrix
850(``Eigen::MatrixXd``) type, which supports initialization from compatible
851buffer
852objects (e.g. a NumPy matrix).
853
854.. code-block:: cpp
855
856 py::class_<Eigen::MatrixXd>(m, "MatrixXd")
857 .def("__init__", [](Eigen::MatrixXd &m, py::buffer b) {
858 /* Request a buffer descriptor from Python */
859 py::buffer_info info = b.request();
860
861 /* Some sanity checks ... */
862 if (info.format != py::format_descriptor<double>::value())
863 throw std::runtime_error("Incompatible format: expected a double array!");
864
865 if (info.ndim != 2)
866 throw std::runtime_error("Incompatible buffer dimension!");
867
868 if (info.strides[0] == sizeof(double)) {
869 /* Buffer has the right layout -- directly copy. */
870 new (&m) Eigen::MatrixXd(info.shape[0], info.shape[1]);
871 memcpy(m.data(), info.ptr, sizeof(double) * m.size());
872 } else {
873 /* Oops -- the buffer is transposed */
874 new (&m) Eigen::MatrixXd(info.shape[1], info.shape[0]);
875 memcpy(m.data(), info.ptr, sizeof(double) * m.size());
876 m.transposeInPlace();
877 }
878 });
879
Wenzel Jakob93296692015-10-13 23:21:54 +0200880.. seealso::
881
882 The file :file:`example/example7.cpp` contains a complete example that
883 demonstrates using the buffer protocol with pybind11 in more detail.
884
Wenzel Jakob1c329aa2016-04-13 02:37:36 +0200885.. [#f1] http://docs.python.org/3/c-api/buffer.html
Wenzel Jakob978e3762016-04-07 18:00:41 +0200886
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200887NumPy support
888=============
889
890By exchanging ``py::buffer`` with ``py::array`` in the above snippet, we can
891restrict the function so that it only accepts NumPy arrays (rather than any
Wenzel Jakob978e3762016-04-07 18:00:41 +0200892type of Python object satisfying the buffer protocol).
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200893
894In many situations, we want to define a function which only accepts a NumPy
Wenzel Jakob93296692015-10-13 23:21:54 +0200895array of a certain data type. This is possible via the ``py::array_t<T>``
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200896template. For instance, the following function requires the argument to be a
897dense array of doubles in C-style ordering.
898
899.. code-block:: cpp
900
Wenzel Jakob93296692015-10-13 23:21:54 +0200901 void f(py::array_t<double> array);
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200902
903When it is invoked with a different type (e.g. an integer), the binding code
Wenzel Jakob978e3762016-04-07 18:00:41 +0200904will attempt to cast the input into a NumPy array of the requested type. Note
905that this feature requires the :file:``pybind11/numpy.h`` header to be
906included.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200907
908Vectorizing functions
909=====================
910
911Suppose we want to bind a function with the following signature to Python so
912that it can process arbitrary NumPy array arguments (vectors, matrices, general
913N-D arrays) in addition to its normal arguments:
914
915.. code-block:: cpp
916
917 double my_func(int x, float y, double z);
918
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200919After including the ``pybind11/numpy.h`` header, this is extremely simple:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200920
921.. code-block:: cpp
922
923 m.def("vectorized_func", py::vectorize(my_func));
924
925Invoking the function like below causes 4 calls to be made to ``my_func`` with
Wenzel Jakob978e3762016-04-07 18:00:41 +0200926each of the the array elements. The significant advantage of this compared to
927solutions like ``numpy.vectorize()`` is that the loop over the elements runs
928entirely on the C++ side and can be crunched down into a tight, optimized loop
929by the compiler. The result is returned as a NumPy array of type
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200930``numpy.dtype.float64``.
931
932.. code-block:: python
933
934 >>> x = np.array([[1, 3],[5, 7]])
935 >>> y = np.array([[2, 4],[6, 8]])
936 >>> z = 3
937 >>> result = vectorized_func(x, y, z)
938
939The scalar argument ``z`` is transparently replicated 4 times. The input
940arrays ``x`` and ``y`` are automatically converted into the right types (they
941are of type ``numpy.dtype.int64`` but need to be ``numpy.dtype.int32`` and
942``numpy.dtype.float32``, respectively)
943
944Sometimes we might want to explitly exclude an argument from the vectorization
945because it makes little sense to wrap it in a NumPy array. For instance,
946suppose the function signature was
947
948.. code-block:: cpp
949
950 double my_func(int x, float y, my_custom_type *z);
951
952This can be done with a stateful Lambda closure:
953
954.. code-block:: cpp
955
956 // Vectorize a lambda function with a capture object (e.g. to exclude some arguments from the vectorization)
957 m.def("vectorized_func",
Wenzel Jakob93296692015-10-13 23:21:54 +0200958 [](py::array_t<int> x, py::array_t<float> y, my_custom_type *z) {
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200959 auto stateful_closure = [z](int x, float y) { return my_func(x, y, z); };
960 return py::vectorize(stateful_closure)(x, y);
961 }
962 );
963
Wenzel Jakob61587162016-01-18 22:38:52 +0100964In cases where the computation is too complicated to be reduced to
965``vectorize``, it will be necessary to create and access the buffer contents
966manually. The following snippet contains a complete example that shows how this
967works (the code is somewhat contrived, since it could have been done more
968simply using ``vectorize``).
969
970.. code-block:: cpp
971
972 #include <pybind11/pybind11.h>
973 #include <pybind11/numpy.h>
974
975 namespace py = pybind11;
976
977 py::array_t<double> add_arrays(py::array_t<double> input1, py::array_t<double> input2) {
978 auto buf1 = input1.request(), buf2 = input2.request();
979
980 if (buf1.ndim != 1 || buf2.ndim != 1)
981 throw std::runtime_error("Number of dimensions must be one");
982
983 if (buf1.shape[0] != buf2.shape[0])
984 throw std::runtime_error("Input shapes must match");
985
986 auto result = py::array(py::buffer_info(
987 nullptr, /* Pointer to data (nullptr -> ask NumPy to allocate!) */
988 sizeof(double), /* Size of one item */
989 py::format_descriptor<double>::value(), /* Buffer format */
990 buf1.ndim, /* How many dimensions? */
991 { buf1.shape[0] }, /* Number of elements for each dimension */
992 { sizeof(double) } /* Strides for each dimension */
993 ));
994
995 auto buf3 = result.request();
996
997 double *ptr1 = (double *) buf1.ptr,
998 *ptr2 = (double *) buf2.ptr,
999 *ptr3 = (double *) buf3.ptr;
1000
1001 for (size_t idx = 0; idx < buf1.shape[0]; idx++)
1002 ptr3[idx] = ptr1[idx] + ptr2[idx];
1003
1004 return result;
1005 }
1006
1007 PYBIND11_PLUGIN(test) {
1008 py::module m("test");
1009 m.def("add_arrays", &add_arrays, "Add two NumPy arrays");
1010 return m.ptr();
1011 }
1012
Wenzel Jakob93296692015-10-13 23:21:54 +02001013.. seealso::
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001014
Wenzel Jakob93296692015-10-13 23:21:54 +02001015 The file :file:`example/example10.cpp` contains a complete example that
1016 demonstrates using :func:`vectorize` in more detail.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001017
Wenzel Jakob93296692015-10-13 23:21:54 +02001018Functions taking Python objects as arguments
1019============================================
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001020
Wenzel Jakob93296692015-10-13 23:21:54 +02001021pybind11 exposes all major Python types using thin C++ wrapper classes. These
1022wrapper classes can also be used as parameters of functions in bindings, which
1023makes it possible to directly work with native Python types on the C++ side.
1024For instance, the following statement iterates over a Python ``dict``:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001025
Wenzel Jakob93296692015-10-13 23:21:54 +02001026.. code-block:: cpp
1027
1028 void print_dict(py::dict dict) {
1029 /* Easily interact with Python types */
1030 for (auto item : dict)
1031 std::cout << "key=" << item.first << ", "
1032 << "value=" << item.second << std::endl;
1033 }
1034
1035Available types include :class:`handle`, :class:`object`, :class:`bool_`,
Wenzel Jakob27e8e102016-01-17 22:36:37 +01001036:class:`int_`, :class:`float_`, :class:`str`, :class:`bytes`, :class:`tuple`,
1037:class:`list`, :class:`dict`, :class:`slice`, :class:`capsule`,
1038:class:`function`, :class:`buffer`, :class:`array`, and :class:`array_t`.
Wenzel Jakob93296692015-10-13 23:21:54 +02001039
Wenzel Jakob436b7312015-10-20 01:04:30 +02001040In this kind of mixed code, it is often necessary to convert arbitrary C++
1041types to Python, which can be done using :func:`cast`:
1042
1043.. code-block:: cpp
1044
1045 MyClass *cls = ..;
1046 py::object obj = py::cast(cls);
1047
1048The reverse direction uses the following syntax:
1049
1050.. code-block:: cpp
1051
1052 py::object obj = ...;
1053 MyClass *cls = obj.cast<MyClass *>();
1054
1055When conversion fails, both directions throw the exception :class:`cast_error`.
1056
Wenzel Jakob93296692015-10-13 23:21:54 +02001057.. seealso::
1058
1059 The file :file:`example/example2.cpp` contains a complete example that
1060 demonstrates passing native Python types in more detail.
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001061
1062Default arguments revisited
1063===========================
1064
1065The section on :ref:`default_args` previously discussed basic usage of default
1066arguments using pybind11. One noteworthy aspect of their implementation is that
1067default arguments are converted to Python objects right at declaration time.
1068Consider the following example:
1069
1070.. code-block:: cpp
1071
1072 py::class_<MyClass>("MyClass")
1073 .def("myFunction", py::arg("arg") = SomeType(123));
1074
1075In this case, pybind11 must already be set up to deal with values of the type
1076``SomeType`` (via a prior instantiation of ``py::class_<SomeType>``), or an
1077exception will be thrown.
1078
1079Another aspect worth highlighting is that the "preview" of the default argument
1080in the function signature is generated using the object's ``__repr__`` method.
1081If not available, the signature may not be very helpful, e.g.:
1082
1083.. code-block:: python
1084
1085 FUNCTIONS
1086 ...
1087 | myFunction(...)
Wenzel Jakob48548ea2016-01-17 22:36:44 +01001088 | Signature : (MyClass, arg : SomeType = <SomeType object at 0x101b7b080>) -> NoneType
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001089 ...
1090
1091The first way of addressing this is by defining ``SomeType.__repr__``.
1092Alternatively, it is possible to specify the human-readable preview of the
1093default argument manually using the ``arg_t`` notation:
1094
1095.. code-block:: cpp
1096
1097 py::class_<MyClass>("MyClass")
1098 .def("myFunction", py::arg_t<SomeType>("arg", SomeType(123), "SomeType(123)"));
1099
Wenzel Jakobc769fce2016-03-03 12:03:30 +01001100Sometimes it may be necessary to pass a null pointer value as a default
1101argument. In this case, remember to cast it to the underlying type in question,
1102like so:
1103
1104.. code-block:: cpp
1105
1106 py::class_<MyClass>("MyClass")
1107 .def("myFunction", py::arg("arg") = (SomeType *) nullptr);
1108
Wenzel Jakob2dfbade2016-01-17 22:36:37 +01001109Partitioning code over multiple extension modules
1110=================================================
1111
Wenzel Jakob90d2f5e2016-04-11 14:30:11 +02001112It's straightforward to split binding code over multiple extension modules,
1113while referencing types that are declared elsewhere. Everything "just" works
1114without any special precautions. One exception to this rule occurs when
1115extending a type declared in another extension module. Recall the basic example
1116from Section :ref:`inheritance`.
Wenzel Jakob2dfbade2016-01-17 22:36:37 +01001117
1118.. code-block:: cpp
1119
1120 py::class_<Pet> pet(m, "Pet");
1121 pet.def(py::init<const std::string &>())
1122 .def_readwrite("name", &Pet::name);
1123
1124 py::class_<Dog>(m, "Dog", pet /* <- specify parent */)
1125 .def(py::init<const std::string &>())
1126 .def("bark", &Dog::bark);
1127
1128Suppose now that ``Pet`` bindings are defined in a module named ``basic``,
1129whereas the ``Dog`` bindings are defined somewhere else. The challenge is of
1130course that the variable ``pet`` is not available anymore though it is needed
1131to indicate the inheritance relationship to the constructor of ``class_<Dog>``.
1132However, it can be acquired as follows:
1133
1134.. code-block:: cpp
1135
1136 py::object pet = (py::object) py::module::import("basic").attr("Pet");
1137
1138 py::class_<Dog>(m, "Dog", pet)
1139 .def(py::init<const std::string &>())
1140 .def("bark", &Dog::bark);
1141
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001142Alternatively, we can rely on the ``base`` tag, which performs an automated
1143lookup of the corresponding Python type. However, this also requires invoking
1144the ``import`` function once to ensure that the pybind11 binding code of the
1145module ``basic`` has been executed.
1146
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001147.. code-block:: cpp
1148
1149 py::module::import("basic");
1150
1151 py::class_<Dog>(m, "Dog", py::base<Pet>())
1152 .def(py::init<const std::string &>())
1153 .def("bark", &Dog::bark);
Wenzel Jakobeda978e2016-03-15 15:05:40 +01001154
Wenzel Jakob978e3762016-04-07 18:00:41 +02001155Naturally, both methods will fail when there are cyclic dependencies.
1156
Wenzel Jakob90d2f5e2016-04-11 14:30:11 +02001157Note that compiling code which has its default symbol visibility set to
1158*hidden* (e.g. via the command line flag ``-fvisibility=hidden`` on GCC/Clang) can interfere with the
1159ability to access types defined in another extension module. Workarounds
1160include changing the global symbol visibility (not recommended, because it will
1161lead unnecessarily large binaries) or manually exporting types that are
1162accessed by multiple extension modules:
1163
1164.. code-block:: cpp
1165
1166 #ifdef _WIN32
1167 # define EXPORT_TYPE __declspec(dllexport)
1168 #else
1169 # define EXPORT_TYPE __attribute__ ((visibility("default")))
1170 #endif
1171
1172 class EXPORT_TYPE Dog : public Animal {
1173 ...
1174 };
1175
1176
Wenzel Jakobeda978e2016-03-15 15:05:40 +01001177Treating STL data structures as opaque objects
1178==============================================
1179
1180pybind11 heavily relies on a template matching mechanism to convert parameters
1181and return values that are constructed from STL data types such as vectors,
1182linked lists, hash tables, etc. This even works in a recursive manner, for
1183instance to deal with lists of hash maps of pairs of elementary and custom
1184types, etc.
1185
Wenzel Jakob08712282016-04-22 16:52:15 +02001186However, a fundamental limitation of this approach is that internal conversions
1187between Python and C++ types involve a copy operation that prevents
Wenzel Jakob978e3762016-04-07 18:00:41 +02001188pass-by-reference semantics. What does this mean?
Wenzel Jakobeda978e2016-03-15 15:05:40 +01001189
1190Suppose we bind the following function
1191
1192.. code-block:: cpp
1193
1194 void append_1(std::vector<int> &v) {
1195 v.push_back(1);
1196 }
1197
1198and call it as follows from Python:
1199
1200.. code-block:: python
1201
1202 >>> v = [5, 6]
1203 >>> append_1(v)
1204 >>> print(v)
1205 [5, 6]
1206
1207As you can see, when passing STL data structures by reference, modifications
Wenzel Jakob08712282016-04-22 16:52:15 +02001208are not propagated back the Python side. A similar situation arises when
1209exposing STL data structures using the ``def_readwrite`` or ``def_readonly``
1210functions:
Wenzel Jakobeda978e2016-03-15 15:05:40 +01001211
Wenzel Jakob08712282016-04-22 16:52:15 +02001212.. code-block:: cpp
1213
1214 /* ... definition ... */
1215
1216 class MyClass {
1217 std::vector<int> contents;
1218 };
1219
1220 /* ... binding code ... */
1221
1222 py::class_<MyClass>(m, "MyClass")
1223 .def(py::init<>)
1224 .def_readwrite("contents", &MyClass::contents);
1225
1226In this case, properties can be read and written in their entirety. However, an
1227``append`` operaton involving such a list type has no effect:
1228
1229.. code-block:: python
1230
1231 >>> m = MyClass()
1232 >>> m.contents = [5, 6]
1233 >>> print(m.contents)
1234 [5, 6]
1235 >>> m.contents.append(7)
1236 >>> print(m.contents)
1237 [5, 6]
1238
1239To deal with both of the above situations, pybind11 contains a simple template
1240wrapper class named ``opaque<T>``.
1241
1242``opaque<T>`` disables pybind11's template-based conversion machinery for
Wenzel Jakobeda978e2016-03-15 15:05:40 +01001243``T`` and can be used to treat STL types as opaque objects, whose contents are
1244never inspected or extracted (thus, they can be passed by reference).
1245The downside of this approach is that it the binding code becomes a bit more
1246wordy. The above function can be bound using the following wrapper code:
1247
1248.. code-block:: cpp
1249
1250 m.def("append_1", [](py::opaque<std::vector<int>> &v) { append_1(v); });
1251
1252Opaque types must also have a dedicated ``class_`` declaration to define a
1253set of admissible operations.
1254
1255.. seealso::
1256
1257 The file :file:`example/example14.cpp` contains a complete example that
Wenzel Jakob08712282016-04-22 16:52:15 +02001258 demonstrates how to create and expose opaque types using pybind11 in more
1259 detail.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001260
1261Pickling support
1262================
1263
1264Python's ``pickle`` module provides a powerful facility to serialize and
1265de-serialize a Python object graph into a binary data stream. To pickle and
Wenzel Jakob3d0e6ff2016-04-13 11:48:10 +02001266unpickle C++ classes using pybind11, two additional functions must be provided.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001267Suppose the class in question has the following signature:
1268
1269.. code-block:: cpp
1270
1271 class Pickleable {
1272 public:
1273 Pickleable(const std::string &value) : m_value(value) { }
1274 const std::string &value() const { return m_value; }
1275
1276 void setExtra(int extra) { m_extra = extra; }
1277 int extra() const { return m_extra; }
1278 private:
1279 std::string m_value;
1280 int m_extra = 0;
1281 };
1282
1283The binding code including the requisite ``__setstate__`` and ``__getstate__`` methods [#f2]_
1284looks as follows:
1285
1286.. code-block:: cpp
1287
1288 py::class_<Pickleable>(m, "Pickleable")
1289 .def(py::init<std::string>())
1290 .def("value", &Pickleable::value)
1291 .def("extra", &Pickleable::extra)
1292 .def("setExtra", &Pickleable::setExtra)
1293 .def("__getstate__", [](const Pickleable &p) {
1294 /* Return a tuple that fully encodes the state of the object */
1295 return py::make_tuple(p.value(), p.extra());
1296 })
1297 .def("__setstate__", [](Pickleable &p, py::tuple t) {
1298 if (t.size() != 2)
1299 throw std::runtime_error("Invalid state!");
1300
Wenzel Jakobd40885a2016-04-13 13:30:05 +02001301 /* Invoke the in-place constructor. Note that this is needed even
1302 when the object just has a trivial default constructor */
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001303 new (&p) Pickleable(t[0].cast<std::string>());
1304
1305 /* Assign any additional state */
1306 p.setExtra(t[1].cast<int>());
1307 });
1308
1309An instance can now be pickled as follows:
1310
1311.. code-block:: python
1312
1313 try:
1314 import cPickle as pickle # Use cPickle on Python 2.7
1315 except ImportError:
1316 import pickle
1317
1318 p = Pickleable("test_value")
1319 p.setExtra(15)
Wenzel Jakob3d0e6ff2016-04-13 11:48:10 +02001320 data = pickle.dumps(p, -1)
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001321
1322Note that only the cPickle module is supported on Python 2.7. It is also
1323important to request usage of the highest protocol version using the ``-1``
Wenzel Jakobd40885a2016-04-13 13:30:05 +02001324argument to ``dumps``. Failure to follow these two steps will lead to important
1325pybind11 memory allocation routines to be skipped during unpickling, which will
1326likely cause memory corruption and/or segmentation faults.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001327
1328.. seealso::
1329
1330 The file :file:`example/example15.cpp` contains a complete example that
1331 demonstrates how to pickle and unpickle types using pybind11 in more detail.
1332
1333.. [#f2] http://docs.python.org/3/library/pickle.html#pickling-class-instances
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001334
1335Generating documentation using Sphinx
1336=====================================
1337
1338Sphinx [#f3]_ has the ability to inspect the signatures and documentation
1339strings in pybind11-based extension modules to automatically generate beautiful
1340documentation in a variety formats. The pbtest repository [#f4]_ contains a
1341simple example repository which uses this approach.
1342
1343There are two potential gotchas when using this approach: first, make sure that
1344the resulting strings do not contain any :kbd:`TAB` characters, which break the
1345docstring parsing routines. You may want to use C++11 raw string literals,
1346which are convenient for multi-line comments. Conveniently, any excess
1347indentation will be automatically be removed by Sphinx. However, for this to
1348work, it is important that all lines are indented consistently, i.e.:
1349
1350.. code-block:: cpp
1351
1352 // ok
1353 m.def("foo", &foo, R"mydelimiter(
1354 The foo function
1355
1356 Parameters
1357 ----------
1358 )mydelimiter");
1359
1360 // *not ok*
1361 m.def("foo", &foo, R"mydelimiter(The foo function
1362
1363 Parameters
1364 ----------
1365 )mydelimiter");
1366
1367.. [#f3] http://www.sphinx-doc.org
1368.. [#f4] http://github.com/pybind/pbtest
1369