blob: 27df2d89611f806d7326b96720a274ad7c813ff2 [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
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400105 The file :file:`example/example-operator-overloading.cpp` contains a
106 complete example that demonstrates how to work with overloaded operators in
107 more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +0200108
109Callbacks and passing anonymous functions
110=========================================
111
112The C++11 standard brought lambda functions and the generic polymorphic
113function wrapper ``std::function<>`` to the C++ programming language, which
114enable powerful new ways of working with functions. Lambda functions come in
115two flavors: stateless lambda function resemble classic function pointers that
116link to an anonymous piece of code, while stateful lambda functions
117additionally depend on captured variables that are stored in an anonymous
118*lambda closure object*.
119
120Here is a simple example of a C++ function that takes an arbitrary function
121(stateful or stateless) with signature ``int -> int`` as an argument and runs
122it with the value 10.
123
124.. code-block:: cpp
125
126 int func_arg(const std::function<int(int)> &f) {
127 return f(10);
128 }
129
130The example below is more involved: it takes a function of signature ``int -> int``
131and returns another function of the same kind. The return value is a stateful
132lambda function, which stores the value ``f`` in the capture object and adds 1 to
133its return value upon execution.
134
135.. code-block:: cpp
136
137 std::function<int(int)> func_ret(const std::function<int(int)> &f) {
138 return [f](int i) {
139 return f(i) + 1;
140 };
141 }
142
Brad Harmon835fc062016-06-16 13:19:15 -0500143This example demonstrates using python named parameters in C++ callbacks which
144requires using ``py::cpp_function`` as a wrapper. Usage is similar to defining
145methods of classes:
146
147.. code-block:: cpp
148
149 py::cpp_function func_cpp() {
150 return py::cpp_function([](int i) { return i+1; },
151 py::arg("number"));
152 }
153
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200154After including the extra header file :file:`pybind11/functional.h`, it is almost
Brad Harmon835fc062016-06-16 13:19:15 -0500155trivial to generate binding code for all of these functions.
Wenzel Jakob93296692015-10-13 23:21:54 +0200156
157.. code-block:: cpp
158
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200159 #include <pybind11/functional.h>
Wenzel Jakob93296692015-10-13 23:21:54 +0200160
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200161 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200162 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200163
164 m.def("func_arg", &func_arg);
165 m.def("func_ret", &func_ret);
Brad Harmon835fc062016-06-16 13:19:15 -0500166 m.def("func_cpp", &func_cpp);
Wenzel Jakob93296692015-10-13 23:21:54 +0200167
168 return m.ptr();
169 }
170
171The following interactive session shows how to call them from Python.
172
Wenzel Jakob99279f72016-06-03 11:19:29 +0200173.. code-block:: pycon
Wenzel Jakob93296692015-10-13 23:21:54 +0200174
175 $ python
176 >>> import example
177 >>> def square(i):
178 ... return i * i
179 ...
180 >>> example.func_arg(square)
181 100L
182 >>> square_plus_1 = example.func_ret(square)
183 >>> square_plus_1(4)
184 17L
Brad Harmon835fc062016-06-16 13:19:15 -0500185 >>> plus_1 = func_cpp()
186 >>> plus_1(number=43)
187 44L
Wenzel Jakob93296692015-10-13 23:21:54 +0200188
Wenzel Jakoba4175d62015-11-17 08:30:34 +0100189.. warning::
190
191 Keep in mind that passing a function from C++ to Python (or vice versa)
192 will instantiate a piece of wrapper code that translates function
Wenzel Jakob954b7932016-07-10 10:13:18 +0200193 invocations between the two languages. Naturally, this translation
194 increases the computational cost of each function call somewhat. A
195 problematic situation can arise when a function is copied back and forth
196 between Python and C++ many times in a row, in which case the underlying
197 wrappers will accumulate correspondingly. The resulting long sequence of
198 C++ -> Python -> C++ -> ... roundtrips can significantly decrease
199 performance.
200
201 There is one exception: pybind11 detects case where a stateless function
202 (i.e. a function pointer or a lambda function without captured variables)
203 is passed as an argument to another C++ function exposed in Python. In this
204 case, there is no overhead. Pybind11 will extract the underlying C++
205 function pointer from the wrapped function to sidestep a potential C++ ->
206 Python -> C++ roundtrip. This is demonstrated in Example 5.
207
208.. note::
209
210 This functionality is very useful when generating bindings for callbacks in
211 C++ libraries (e.g. GUI libraries, asynchronous networking libraries, etc.).
212
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400213 The file :file:`example/example-callbacks.cpp` contains a complete example
214 that demonstrates how to work with callbacks and anonymous functions in
215 more detail.
Wenzel Jakoba4175d62015-11-17 08:30:34 +0100216
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200217Overriding virtual functions in Python
218======================================
219
Wenzel Jakob93296692015-10-13 23:21:54 +0200220Suppose that a C++ class or interface has a virtual function that we'd like to
221to override from within Python (we'll focus on the class ``Animal``; ``Dog`` is
222given as a specific example of how one would do this with traditional C++
223code).
224
225.. code-block:: cpp
226
227 class Animal {
228 public:
229 virtual ~Animal() { }
230 virtual std::string go(int n_times) = 0;
231 };
232
233 class Dog : public Animal {
234 public:
235 std::string go(int n_times) {
236 std::string result;
237 for (int i=0; i<n_times; ++i)
238 result += "woof! ";
239 return result;
240 }
241 };
242
243Let's also suppose that we are given a plain function which calls the
244function ``go()`` on an arbitrary ``Animal`` instance.
245
246.. code-block:: cpp
247
248 std::string call_go(Animal *animal) {
249 return animal->go(3);
250 }
251
252Normally, the binding code for these classes would look as follows:
253
254.. code-block:: cpp
255
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200256 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200257 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200258
259 py::class_<Animal> animal(m, "Animal");
260 animal
261 .def("go", &Animal::go);
262
263 py::class_<Dog>(m, "Dog", animal)
264 .def(py::init<>());
265
266 m.def("call_go", &call_go);
267
268 return m.ptr();
269 }
270
271However, these bindings are impossible to extend: ``Animal`` is not
272constructible, and we clearly require some kind of "trampoline" that
273redirects virtual calls back to Python.
274
275Defining a new type of ``Animal`` from within Python is possible but requires a
276helper class that is defined as follows:
277
278.. code-block:: cpp
279
280 class PyAnimal : public Animal {
281 public:
282 /* Inherit the constructors */
283 using Animal::Animal;
284
285 /* Trampoline (need one for each virtual function) */
286 std::string go(int n_times) {
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200287 PYBIND11_OVERLOAD_PURE(
Wenzel Jakob93296692015-10-13 23:21:54 +0200288 std::string, /* Return type */
289 Animal, /* Parent class */
290 go, /* Name of function */
291 n_times /* Argument(s) */
292 );
293 }
294 };
295
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200296The macro :func:`PYBIND11_OVERLOAD_PURE` should be used for pure virtual
297functions, and :func:`PYBIND11_OVERLOAD` should be used for functions which have
Wenzel Jakob0d3fc352016-07-08 10:52:10 +0200298a default implementation.
Wenzel Jakob1e3be732016-05-24 23:42:05 +0200299
300There are also two alternate macros :func:`PYBIND11_OVERLOAD_PURE_NAME` and
301:func:`PYBIND11_OVERLOAD_NAME` which take a string-valued name argument
302after the *Name of the function* slot. This is useful when the C++ and Python
303versions of the function have different names, e.g. ``operator()`` vs ``__call__``.
304
305The binding code also needs a few minor adaptations (highlighted):
Wenzel Jakob93296692015-10-13 23:21:54 +0200306
307.. code-block:: cpp
308 :emphasize-lines: 4,6,7
309
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200310 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200311 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200312
Wenzel Jakob86d825f2016-05-26 13:19:27 +0200313 py::class_<Animal, std::unique_ptr<Animal>, PyAnimal /* <--- trampoline*/> animal(m, "Animal");
Wenzel Jakob93296692015-10-13 23:21:54 +0200314 animal
Wenzel Jakob93296692015-10-13 23:21:54 +0200315 .def(py::init<>())
316 .def("go", &Animal::go);
317
318 py::class_<Dog>(m, "Dog", animal)
319 .def(py::init<>());
320
321 m.def("call_go", &call_go);
322
323 return m.ptr();
324 }
325
Wenzel Jakob86d825f2016-05-26 13:19:27 +0200326Importantly, pybind11 is made aware of the trampoline trampoline helper class
327by specifying it as the *third* template argument to :class:`class_`. The
328second argument with the unique pointer is simply the default holder type used
329by pybind11. Following this, we are able to define a constructor as usual.
Wenzel Jakob93296692015-10-13 23:21:54 +0200330
331The Python session below shows how to override ``Animal::go`` and invoke it via
332a virtual method call.
333
Wenzel Jakob99279f72016-06-03 11:19:29 +0200334.. code-block:: pycon
Wenzel Jakob93296692015-10-13 23:21:54 +0200335
336 >>> from example import *
337 >>> d = Dog()
338 >>> call_go(d)
339 u'woof! woof! woof! '
340 >>> class Cat(Animal):
341 ... def go(self, n_times):
342 ... return "meow! " * n_times
343 ...
344 >>> c = Cat()
345 >>> call_go(c)
346 u'meow! meow! meow! '
347
Wenzel Jakob9bb97c12016-06-03 11:19:41 +0200348Please take a look at the :ref:`macro_notes` before using this feature.
Wenzel Jakobbd986fe2016-05-21 10:48:30 +0200349
Wenzel Jakob93296692015-10-13 23:21:54 +0200350.. seealso::
351
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400352 The file :file:`example/example-virtual-functions.cpp` contains a complete
353 example that demonstrates how to override virtual functions using pybind11
354 in more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +0200355
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100356
Wenzel Jakob9bb97c12016-06-03 11:19:41 +0200357.. _macro_notes:
358
359General notes regarding convenience macros
360==========================================
361
362pybind11 provides a few convenience macros such as
363:func:`PYBIND11_MAKE_OPAQUE` and :func:`PYBIND11_DECLARE_HOLDER_TYPE`, and
364``PYBIND11_OVERLOAD_*``. Since these are "just" macros that are evaluated
365in the preprocessor (which has no concept of types), they *will* get confused
366by commas in a template argument such as ``PYBIND11_OVERLOAD(MyReturnValue<T1,
367T2>, myFunc)``. In this case, the preprocessor assumes that the comma indicates
368the beginnning of the next parameter. Use a ``typedef`` to bind the template to
369another name and use it in the macro to avoid this problem.
370
371
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100372Global Interpreter Lock (GIL)
373=============================
374
375The classes :class:`gil_scoped_release` and :class:`gil_scoped_acquire` can be
376used to acquire and release the global interpreter lock in the body of a C++
377function call. In this way, long-running C++ code can be parallelized using
378multiple Python threads. Taking the previous section as an example, this could
379be realized as follows (important changes highlighted):
380
381.. code-block:: cpp
382 :emphasize-lines: 8,9,33,34
383
384 class PyAnimal : public Animal {
385 public:
386 /* Inherit the constructors */
387 using Animal::Animal;
388
389 /* Trampoline (need one for each virtual function) */
390 std::string go(int n_times) {
391 /* Acquire GIL before calling Python code */
Wenzel Jakoba4caa852015-12-14 12:39:02 +0100392 py::gil_scoped_acquire acquire;
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100393
394 PYBIND11_OVERLOAD_PURE(
395 std::string, /* Return type */
396 Animal, /* Parent class */
397 go, /* Name of function */
398 n_times /* Argument(s) */
399 );
400 }
401 };
402
403 PYBIND11_PLUGIN(example) {
404 py::module m("example", "pybind11 example plugin");
405
Wenzel Jakob86d825f2016-05-26 13:19:27 +0200406 py::class_<Animal, std::unique_ptr<Animal>, PyAnimal> animal(m, "Animal");
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100407 animal
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100408 .def(py::init<>())
409 .def("go", &Animal::go);
410
411 py::class_<Dog>(m, "Dog", animal)
412 .def(py::init<>());
413
414 m.def("call_go", [](Animal *animal) -> std::string {
415 /* Release GIL before calling into (potentially long-running) C++ code */
Wenzel Jakoba4caa852015-12-14 12:39:02 +0100416 py::gil_scoped_release release;
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100417 return call_go(animal);
418 });
419
420 return m.ptr();
421 }
422
Wenzel Jakob93296692015-10-13 23:21:54 +0200423Passing STL data structures
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200424===========================
425
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200426When including the additional header file :file:`pybind11/stl.h`, conversions
Wenzel Jakob978e3762016-04-07 18:00:41 +0200427between ``std::vector<>``, ``std::list<>``, ``std::set<>``, and ``std::map<>``
428and the Python ``list``, ``set`` and ``dict`` data structures are automatically
429enabled. The types ``std::pair<>`` and ``std::tuple<>`` are already supported
430out of the box with just the core :file:`pybind11/pybind11.h` header.
Wenzel Jakob93296692015-10-13 23:21:54 +0200431
432.. note::
433
Wenzel Jakob44db04f2015-12-14 12:40:45 +0100434 Arbitrary nesting of any of these types is supported.
Wenzel Jakob93296692015-10-13 23:21:54 +0200435
436.. seealso::
437
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400438 The file :file:`example/example-python-types.cpp` contains a complete
439 example that demonstrates how to pass STL data types in more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +0200440
Wenzel Jakobb2825952016-04-13 23:33:00 +0200441Binding sequence data types, iterators, the slicing protocol, etc.
442==================================================================
Wenzel Jakob93296692015-10-13 23:21:54 +0200443
444Please refer to the supplemental example for details.
445
446.. seealso::
447
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400448 The file :file:`example/example-sequences-and-iterators.cpp` contains a
449 complete example that shows how to bind a sequence data type, including
450 length queries (``__len__``), iterators (``__iter__``), the slicing
451 protocol and other kinds of useful operations.
Wenzel Jakob93296692015-10-13 23:21:54 +0200452
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200453Return value policies
454=====================
455
Wenzel Jakob93296692015-10-13 23:21:54 +0200456Python and C++ use wildly different ways of managing the memory and lifetime of
457objects managed by them. This can lead to issues when creating bindings for
458functions that return a non-trivial type. Just by looking at the type
459information, it is not clear whether Python should take charge of the returned
460value and eventually free its resources, or if this is handled on the C++ side.
461For this reason, pybind11 provides a several `return value policy` annotations
462that can be passed to the :func:`module::def` and :func:`class_::def`
Wenzel Jakob61d67f02015-12-14 12:53:06 +0100463functions. The default policy is :enum:`return_value_policy::automatic`.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200464
Wenzel Jakobf64feaf2016-04-28 14:33:45 +0200465.. tabularcolumns:: |p{0.5\textwidth}|p{0.45\textwidth}|
466
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200467+--------------------------------------------------+----------------------------------------------------------------------------+
468| Return value policy | Description |
469+==================================================+============================================================================+
470| :enum:`return_value_policy::automatic` | This is the default return value policy, which falls back to the policy |
471| | :enum:`return_value_policy::take_ownership` when the return value is a |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200472| | pointer. Otherwise, it uses :enum:`return_value::move` or |
473| | :enum:`return_value::copy` for rvalue and lvalue references, respectively. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200474| | See below for a description of what all of these different policies do. |
475+--------------------------------------------------+----------------------------------------------------------------------------+
476| :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 +0200477| | return value is a pointer. This is the default conversion policy for |
478| | function arguments when calling Python functions manually from C++ code |
479| | (i.e. via handle::operator()). You probably won't need to use this. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200480+--------------------------------------------------+----------------------------------------------------------------------------+
481| :enum:`return_value_policy::take_ownership` | Reference an existing object (i.e. do not create a new copy) and take |
482| | ownership. Python will call the destructor and delete operator when the |
483| | object's reference count reaches zero. Undefined behavior ensues when the |
Wenzel Jakobf53e3002016-06-30 14:59:23 +0200484| | C++ side does the same. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200485+--------------------------------------------------+----------------------------------------------------------------------------+
486| :enum:`return_value_policy::copy` | Create a new copy of the returned object, which will be owned by Python. |
487| | This policy is comparably safe because the lifetimes of the two instances |
488| | are decoupled. |
489+--------------------------------------------------+----------------------------------------------------------------------------+
490| :enum:`return_value_policy::move` | Use ``std::move`` to move the return value contents into a new instance |
491| | that will be owned by Python. This policy is comparably safe because the |
492| | lifetimes of the two instances (move source and destination) are decoupled.|
493+--------------------------------------------------+----------------------------------------------------------------------------+
494| :enum:`return_value_policy::reference` | Reference an existing object, but do not take ownership. The C++ side is |
495| | responsible for managing the object's lifetime and deallocating it when |
496| | it is no longer used. Warning: undefined behavior will ensue when the C++ |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200497| | side deletes an object that is still referenced and used by Python. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200498+--------------------------------------------------+----------------------------------------------------------------------------+
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200499| :enum:`return_value_policy::reference_internal` | This policy only applies to methods and properties. It references the |
500| | object without taking ownership similar to the above |
501| | :enum:`return_value_policy::reference` policy. In contrast to that policy, |
502| | the function or property's implicit ``this`` argument (called the *parent*)|
503| | is considered to be the the owner of the return value (the *child*). |
504| | pybind11 then couples the lifetime of the parent to the child via a |
505| | reference relationship that ensures that the parent cannot be garbage |
506| | collected while Python is still using the child. More advanced variations |
507| | of this scheme are also possible using combinations of |
508| | :enum:`return_value_policy::reference` and the :class:`keep_alive` call |
509| | policy described next. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200510+--------------------------------------------------+----------------------------------------------------------------------------+
Wenzel Jakob93296692015-10-13 23:21:54 +0200511
Wenzel Jakobfb6aed22016-07-18 20:29:53 +0200512.. warning::
513
514 Code with invalid call policies might access unitialized memory or free
515 data structures multiple times, which can lead to hard-to-debug
516 non-determinism and segmentation faults, hence it is worth spending the
517 time to understand all the different options in the table above.
518
519One important aspect regarding the above policies is that they only apply to
520instances which pybind11 has *not* seen before, in which case the policy
521clarifies essential questions about the return value's lifetime and ownership.
522
523When pybind11 knows the instance already (as identified via its address in
524memory), it will return the existing Python object wrapper rather than creating
525a copy. This means that functions which merely cast a reference (or pointer)
526into a different type don't do what one would expect:
527
528.. code-block:: cpp
529
530 A &func(B &value) { return (A&) value; }
531
532The wrapped version of this function will return the original ``B`` instance.
533To force a cast, the argument should be returned by value.
534
535More common (and equally problematic) are cases where methods (e.g. getters)
536return a pointer or reference to the first attribute of a class.
537
538.. code-block:: cpp
539 :emphasize-lines: 3, 13
540
541 class Example {
542 public:
543 Internal &get_internal() { return internal; }
544 private:
545 Internal internal;
546 };
547
548 PYBIND11_PLUGIN(example) {
549 py::module m("example", "pybind11 example plugin");
550
551 py::class_<Example>(m, "Example")
552 .def(py::init<>())
553 .def("get_internal", &Example::get_internal); /* Note: don't do this! */
554
555 return m.ptr();
556 }
557
558As in the above casting example, the instance and its attribute will be located
559at the same address in memory, which pybind11 will recongnize and return the
560parent instance instead of creating a new Python object that represents the
561attribute. The special :enum:`return_value_policy::reference_internal` policy
562should be used in this case: it disables the same-address optimization and
563ensures that pybind11 returns a reference.
564The following example snippet shows the correct usage:
Wenzel Jakob93296692015-10-13 23:21:54 +0200565
566.. code-block:: cpp
567
568 class Example {
569 public:
570 Internal &get_internal() { return internal; }
571 private:
572 Internal internal;
573 };
574
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200575 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200576 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200577
578 py::class_<Example>(m, "Example")
579 .def(py::init<>())
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200580 .def("get_internal", &Example::get_internal, "Return the internal data",
581 py::return_value_policy::reference_internal);
Wenzel Jakob93296692015-10-13 23:21:54 +0200582
583 return m.ptr();
584 }
585
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200586
nafur717df752016-06-28 18:07:11 +0200587
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200588.. note::
589
590 The next section on :ref:`call_policies` discusses *call policies* that can be
591 specified *in addition* to a return value policy from the list above. Call
592 policies indicate reference relationships that can involve both return values
593 and parameters of functions.
594
595.. note::
596
597 As an alternative to elaborate call policies and lifetime management logic,
598 consider using smart pointers (see the section on :ref:`smart_pointers` for
599 details). Smart pointers can tell whether an object is still referenced from
600 C++ or Python, which generally eliminates the kinds of inconsistencies that
601 can lead to crashes or undefined behavior. For functions returning smart
602 pointers, it is not necessary to specify a return value policy.
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100603
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200604.. _call_policies:
605
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100606Additional call policies
607========================
608
609In addition to the above return value policies, further `call policies` can be
610specified to indicate dependencies between parameters. There is currently just
611one policy named ``keep_alive<Nurse, Patient>``, which indicates that the
612argument with index ``Patient`` should be kept alive at least until the
613argument with index ``Nurse`` is freed by the garbage collector; argument
Wenzel Jakob8e93df82016-05-01 02:36:58 +0200614indices start at one, while zero refers to the return value. For methods, index
615one refers to the implicit ``this`` pointer, while regular arguments begin at
616index two. Arbitrarily many call policies can be specified.
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100617
Wenzel Jakob8e93df82016-05-01 02:36:58 +0200618Consider the following example: the binding code for a list append operation
619that ties the lifetime of the newly added element to the underlying container
620might be declared as follows:
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100621
622.. code-block:: cpp
623
624 py::class_<List>(m, "List")
625 .def("append", &List::append, py::keep_alive<1, 2>());
626
627.. note::
628
629 ``keep_alive`` is analogous to the ``with_custodian_and_ward`` (if Nurse,
630 Patient != 0) and ``with_custodian_and_ward_postcall`` (if Nurse/Patient ==
631 0) policies from Boost.Python.
632
Wenzel Jakob61587162016-01-18 22:38:52 +0100633.. seealso::
634
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400635 The file :file:`example/example-keep-alive.cpp` contains a complete example
636 that demonstrates using :class:`keep_alive` in more detail.
Wenzel Jakob61587162016-01-18 22:38:52 +0100637
Wenzel Jakob93296692015-10-13 23:21:54 +0200638Implicit type conversions
639=========================
640
641Suppose that instances of two types ``A`` and ``B`` are used in a project, and
Wenzel Jakob8e93df82016-05-01 02:36:58 +0200642that an ``A`` can easily be converted into an instance of type ``B`` (examples of this
Wenzel Jakob93296692015-10-13 23:21:54 +0200643could be a fixed and an arbitrary precision number type).
644
645.. code-block:: cpp
646
647 py::class_<A>(m, "A")
648 /// ... members ...
649
650 py::class_<B>(m, "B")
651 .def(py::init<A>())
652 /// ... members ...
653
654 m.def("func",
655 [](const B &) { /* .... */ }
656 );
657
658To invoke the function ``func`` using a variable ``a`` containing an ``A``
659instance, we'd have to write ``func(B(a))`` in Python. On the other hand, C++
660will automatically apply an implicit type conversion, which makes it possible
661to directly write ``func(a)``.
662
663In this situation (i.e. where ``B`` has a constructor that converts from
664``A``), the following statement enables similar implicit conversions on the
665Python side:
666
667.. code-block:: cpp
668
669 py::implicitly_convertible<A, B>();
670
Wenzel Jakob3eeea6f2016-06-30 18:10:28 +0200671.. note::
672
673 Implicit conversions from ``A`` to ``B`` only work when ``B`` is a custom
674 data type that is exposed to Python via pybind11.
675
Wenzel Jakobf88af0c2016-06-22 13:52:31 +0200676.. _static_properties:
677
678Static properties
679=================
680
681The section on :ref:`properties` discussed the creation of instance properties
682that are implemented in terms of C++ getters and setters.
683
684Static properties can also be created in a similar way to expose getters and
685setters of static class attributes. It is important to note that the implicit
686``self`` argument also exists in this case and is used to pass the Python
687``type`` subclass instance. This parameter will often not be needed by the C++
688side, and the following example illustrates how to instantiate a lambda getter
689function that ignores it:
690
691.. code-block:: cpp
692
693 py::class_<Foo>(m, "Foo")
694 .def_property_readonly_static("foo", [](py::object /* self */) { return Foo(); });
695
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200696Unique pointers
697===============
698
699Given a class ``Example`` with Python bindings, it's possible to return
700instances wrapped in C++11 unique pointers, like so
701
702.. code-block:: cpp
703
704 std::unique_ptr<Example> create_example() { return std::unique_ptr<Example>(new Example()); }
705
706.. code-block:: cpp
707
708 m.def("create_example", &create_example);
709
710In other words, there is nothing special that needs to be done. While returning
711unique pointers in this way is allowed, it is *illegal* to use them as function
712arguments. For instance, the following function signature cannot be processed
713by pybind11.
714
715.. code-block:: cpp
716
717 void do_something_with_example(std::unique_ptr<Example> ex) { ... }
718
719The above signature would imply that Python needs to give up ownership of an
720object that is passed to this function, which is generally not possible (for
721instance, the object might be referenced elsewhere).
722
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200723.. _smart_pointers:
724
Wenzel Jakob93296692015-10-13 23:21:54 +0200725Smart pointers
726==============
727
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200728This section explains how to pass values that are wrapped in "smart" pointer
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200729types with internal reference counting. For the simpler C++11 unique pointers,
730refer to the previous section.
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200731
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200732The binding generator for classes, :class:`class_`, takes an optional second
Wenzel Jakob93296692015-10-13 23:21:54 +0200733template type, which denotes a special *holder* type that is used to manage
734references to the object. When wrapping a type named ``Type``, the default
735value of this template parameter is ``std::unique_ptr<Type>``, which means that
736the object is deallocated when Python's reference count goes to zero.
737
Wenzel Jakob1853b652015-10-18 15:38:50 +0200738It is possible to switch to other types of reference counting wrappers or smart
739pointers, which is useful in codebases that rely on them. For instance, the
740following snippet causes ``std::shared_ptr`` to be used instead.
Wenzel Jakob93296692015-10-13 23:21:54 +0200741
742.. code-block:: cpp
743
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100744 py::class_<Example, std::shared_ptr<Example> /* <- holder type */> obj(m, "Example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100745
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100746Note that any particular class can only be associated with a single holder type.
Wenzel Jakob93296692015-10-13 23:21:54 +0200747
Wenzel Jakob1853b652015-10-18 15:38:50 +0200748To enable transparent conversions for functions that take shared pointers as an
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100749argument or that return them, a macro invocation similar to the following must
Wenzel Jakob1853b652015-10-18 15:38:50 +0200750be declared at the top level before any binding code:
751
752.. code-block:: cpp
753
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200754 PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr<T>);
Wenzel Jakob1853b652015-10-18 15:38:50 +0200755
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100756.. note::
Wenzel Jakob61d67f02015-12-14 12:53:06 +0100757
758 The first argument of :func:`PYBIND11_DECLARE_HOLDER_TYPE` should be a
759 placeholder name that is used as a template parameter of the second
760 argument. Thus, feel free to use any identifier, but use it consistently on
761 both sides; also, don't use the name of a type that already exists in your
762 codebase.
763
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100764One potential stumbling block when using holder types is that they need to be
765applied consistently. Can you guess what's broken about the following binding
766code?
Wenzel Jakob6e213c92015-11-24 23:05:58 +0100767
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100768.. code-block:: cpp
Wenzel Jakob6e213c92015-11-24 23:05:58 +0100769
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100770 class Child { };
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100771
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100772 class Parent {
773 public:
774 Parent() : child(std::make_shared<Child>()) { }
775 Child *get_child() { return child.get(); } /* Hint: ** DON'T DO THIS ** */
776 private:
777 std::shared_ptr<Child> child;
778 };
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100779
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100780 PYBIND11_PLUGIN(example) {
781 py::module m("example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100782
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100783 py::class_<Child, std::shared_ptr<Child>>(m, "Child");
784
785 py::class_<Parent, std::shared_ptr<Parent>>(m, "Parent")
786 .def(py::init<>())
787 .def("get_child", &Parent::get_child);
788
789 return m.ptr();
790 }
791
792The following Python code will cause undefined behavior (and likely a
793segmentation fault).
794
795.. code-block:: python
796
797 from example import Parent
798 print(Parent().get_child())
799
800The problem is that ``Parent::get_child()`` returns a pointer to an instance of
801``Child``, but the fact that this instance is already managed by
802``std::shared_ptr<...>`` is lost when passing raw pointers. In this case,
803pybind11 will create a second independent ``std::shared_ptr<...>`` that also
804claims ownership of the pointer. In the end, the object will be freed **twice**
805since these shared pointers have no way of knowing about each other.
806
807There are two ways to resolve this issue:
808
8091. For types that are managed by a smart pointer class, never use raw pointers
810 in function arguments or return values. In other words: always consistently
811 wrap pointers into their designated holder types (such as
812 ``std::shared_ptr<...>``). In this case, the signature of ``get_child()``
813 should be modified as follows:
814
815.. code-block:: cpp
816
817 std::shared_ptr<Child> get_child() { return child; }
818
8192. Adjust the definition of ``Child`` by specifying
820 ``std::enable_shared_from_this<T>`` (see cppreference_ for details) as a
821 base class. This adds a small bit of information to ``Child`` that allows
822 pybind11 to realize that there is already an existing
823 ``std::shared_ptr<...>`` and communicate with it. In this case, the
824 declaration of ``Child`` should look as follows:
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100825
Wenzel Jakob6e213c92015-11-24 23:05:58 +0100826.. _cppreference: http://en.cppreference.com/w/cpp/memory/enable_shared_from_this
827
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100828.. code-block:: cpp
829
830 class Child : public std::enable_shared_from_this<Child> { };
831
Wenzel Jakob9bb97c12016-06-03 11:19:41 +0200832
833Please take a look at the :ref:`macro_notes` before using this feature.
834
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100835.. seealso::
836
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400837 The file :file:`example/example-smart-ptr.cpp` contains a complete example
838 that demonstrates how to work with custom reference-counting holder types
839 in more detail.
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100840
Wenzel Jakob93296692015-10-13 23:21:54 +0200841.. _custom_constructors:
842
843Custom constructors
844===================
845
846The syntax for binding constructors was previously introduced, but it only
847works when a constructor with the given parameters actually exists on the C++
848side. To extend this to more general cases, let's take a look at what actually
849happens under the hood: the following statement
850
851.. code-block:: cpp
852
853 py::class_<Example>(m, "Example")
854 .def(py::init<int>());
855
856is short hand notation for
857
858.. code-block:: cpp
859
860 py::class_<Example>(m, "Example")
861 .def("__init__",
862 [](Example &instance, int arg) {
863 new (&instance) Example(arg);
864 }
865 );
866
867In other words, :func:`init` creates an anonymous function that invokes an
868in-place constructor. Memory allocation etc. is already take care of beforehand
869within pybind11.
870
Pim Schellart5a7d17f2016-06-17 17:35:59 -0400871.. _catching_and_throwing_exceptions:
872
Wenzel Jakob93296692015-10-13 23:21:54 +0200873Catching and throwing exceptions
874================================
875
876When C++ code invoked from Python throws an ``std::exception``, it is
877automatically converted into a Python ``Exception``. pybind11 defines multiple
878special exception classes that will map to different types of Python
879exceptions:
880
Wenzel Jakobf64feaf2016-04-28 14:33:45 +0200881.. tabularcolumns:: |p{0.5\textwidth}|p{0.45\textwidth}|
882
Wenzel Jakob978e3762016-04-07 18:00:41 +0200883+--------------------------------------+------------------------------+
884| C++ exception type | Python exception type |
885+======================================+==============================+
886| :class:`std::exception` | ``RuntimeError`` |
887+--------------------------------------+------------------------------+
888| :class:`std::bad_alloc` | ``MemoryError`` |
889+--------------------------------------+------------------------------+
890| :class:`std::domain_error` | ``ValueError`` |
891+--------------------------------------+------------------------------+
892| :class:`std::invalid_argument` | ``ValueError`` |
893+--------------------------------------+------------------------------+
894| :class:`std::length_error` | ``ValueError`` |
895+--------------------------------------+------------------------------+
896| :class:`std::out_of_range` | ``ValueError`` |
897+--------------------------------------+------------------------------+
898| :class:`std::range_error` | ``ValueError`` |
899+--------------------------------------+------------------------------+
900| :class:`pybind11::stop_iteration` | ``StopIteration`` (used to |
901| | implement custom iterators) |
902+--------------------------------------+------------------------------+
903| :class:`pybind11::index_error` | ``IndexError`` (used to |
904| | indicate out of bounds |
905| | accesses in ``__getitem__``, |
906| | ``__setitem__``, etc.) |
907+--------------------------------------+------------------------------+
Sergey Lyskova95bde12016-05-08 19:31:55 -0400908| :class:`pybind11::value_error` | ``ValueError`` (used to |
909| | indicate wrong value passed |
910| | in ``container.remove(...)`` |
911+--------------------------------------+------------------------------+
Wenzel Jakob978e3762016-04-07 18:00:41 +0200912| :class:`pybind11::error_already_set` | Indicates that the Python |
913| | exception flag has already |
914| | been initialized |
915+--------------------------------------+------------------------------+
Wenzel Jakob93296692015-10-13 23:21:54 +0200916
917When a Python function invoked from C++ throws an exception, it is converted
918into a C++ exception of type :class:`error_already_set` whose string payload
919contains a textual summary.
920
921There is also a special exception :class:`cast_error` that is thrown by
922:func:`handle::call` when the input arguments cannot be converted to Python
923objects.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200924
Pim Schellart5a7d17f2016-06-17 17:35:59 -0400925Registering custom exception translators
926========================================
927
928If the default exception conversion policy described
929:ref:`above <catching_and_throwing_exceptions>`
930is insufficient, pybind11 also provides support for registering custom
931exception translators.
932
933The function ``register_exception_translator(translator)`` takes a stateless
934callable (e.g. a function pointer or a lambda function without captured
935variables) with the following call signature: ``void(std::exception_ptr)``.
936
937When a C++ exception is thrown, registered exception translators are tried
938in reverse order of registration (i.e. the last registered translator gets
939a first shot at handling the exception).
940
941Inside the translator, ``std::rethrow_exception`` should be used within
942a try block to re-throw the exception. A catch clause can then use
943``PyErr_SetString`` to set a Python exception as demonstrated
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400944in :file:`example-custom-exceptions.cpp``.
Pim Schellart5a7d17f2016-06-17 17:35:59 -0400945
946This example also demonstrates how to create custom exception types
947with ``py::exception``.
948
949The following example demonstrates this for a hypothetical exception class
950``MyCustomException``:
951
952.. code-block:: cpp
953
954 py::register_exception_translator([](std::exception_ptr p) {
955 try {
956 if (p) std::rethrow_exception(p);
957 } catch (const MyCustomException &e) {
958 PyErr_SetString(PyExc_RuntimeError, e.what());
959 }
960 });
961
962Multiple exceptions can be handled by a single translator. If the exception is
963not caught by the current translator, the previously registered one gets a
964chance.
965
966If none of the registered exception translators is able to handle the
967exception, it is handled by the default converter as described in the previous
968section.
969
970.. note::
971
972 You must either call ``PyErr_SetString`` for every exception caught in a
973 custom exception translator. Failure to do so will cause Python to crash
974 with ``SystemError: error return without exception set``.
975
976 Exceptions that you do not plan to handle should simply not be caught.
977
978 You may also choose to explicity (re-)throw the exception to delegate it to
979 the other existing exception translators.
980
981 The ``py::exception`` wrapper for creating custom exceptions cannot (yet)
982 be used as a ``py::base``.
983
Wenzel Jakob9e0a0562016-05-05 20:33:54 +0200984.. _opaque:
985
986Treating STL data structures as opaque objects
987==============================================
988
989pybind11 heavily relies on a template matching mechanism to convert parameters
990and return values that are constructed from STL data types such as vectors,
991linked lists, hash tables, etc. This even works in a recursive manner, for
992instance to deal with lists of hash maps of pairs of elementary and custom
993types, etc.
994
995However, a fundamental limitation of this approach is that internal conversions
996between Python and C++ types involve a copy operation that prevents
997pass-by-reference semantics. What does this mean?
998
999Suppose we bind the following function
1000
1001.. code-block:: cpp
1002
1003 void append_1(std::vector<int> &v) {
1004 v.push_back(1);
1005 }
1006
1007and call it from Python, the following happens:
1008
Wenzel Jakob99279f72016-06-03 11:19:29 +02001009.. code-block:: pycon
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001010
1011 >>> v = [5, 6]
1012 >>> append_1(v)
1013 >>> print(v)
1014 [5, 6]
1015
1016As you can see, when passing STL data structures by reference, modifications
1017are not propagated back the Python side. A similar situation arises when
1018exposing STL data structures using the ``def_readwrite`` or ``def_readonly``
1019functions:
1020
1021.. code-block:: cpp
1022
1023 /* ... definition ... */
1024
1025 class MyClass {
1026 std::vector<int> contents;
1027 };
1028
1029 /* ... binding code ... */
1030
1031 py::class_<MyClass>(m, "MyClass")
1032 .def(py::init<>)
1033 .def_readwrite("contents", &MyClass::contents);
1034
1035In this case, properties can be read and written in their entirety. However, an
1036``append`` operaton involving such a list type has no effect:
1037
Wenzel Jakob99279f72016-06-03 11:19:29 +02001038.. code-block:: pycon
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001039
1040 >>> m = MyClass()
1041 >>> m.contents = [5, 6]
1042 >>> print(m.contents)
1043 [5, 6]
1044 >>> m.contents.append(7)
1045 >>> print(m.contents)
1046 [5, 6]
1047
1048To deal with both of the above situations, pybind11 provides a macro named
1049``PYBIND11_MAKE_OPAQUE(T)`` that disables the template-based conversion
1050machinery of types, thus rendering them *opaque*. The contents of opaque
1051objects are never inspected or extracted, hence they can be passed by
1052reference. For instance, to turn ``std::vector<int>`` into an opaque type, add
1053the declaration
1054
1055.. code-block:: cpp
1056
1057 PYBIND11_MAKE_OPAQUE(std::vector<int>);
1058
1059before any binding code (e.g. invocations to ``class_::def()``, etc.). This
1060macro must be specified at the top level, since instantiates a partial template
1061overload. If your binding code consists of multiple compilation units, it must
1062be present in every file preceding any usage of ``std::vector<int>``. Opaque
1063types must also have a corresponding ``class_`` declaration to associate them
1064with a name in Python, and to define a set of available operations:
1065
1066.. code-block:: cpp
1067
1068 py::class_<std::vector<int>>(m, "IntVector")
1069 .def(py::init<>())
1070 .def("clear", &std::vector<int>::clear)
1071 .def("pop_back", &std::vector<int>::pop_back)
1072 .def("__len__", [](const std::vector<int> &v) { return v.size(); })
1073 .def("__iter__", [](std::vector<int> &v) {
1074 return py::make_iterator(v.begin(), v.end());
1075 }, py::keep_alive<0, 1>()) /* Keep vector alive while iterator is used */
1076 // ....
1077
Wenzel Jakob9bb97c12016-06-03 11:19:41 +02001078Please take a look at the :ref:`macro_notes` before using this feature.
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001079
1080.. seealso::
1081
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001082 The file :file:`example/example-opaque-types.cpp` contains a complete
1083 example that demonstrates how to create and expose opaque types using
1084 pybind11 in more detail.
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001085
1086.. _eigen:
1087
1088Transparent conversion of dense and sparse Eigen data types
1089===========================================================
1090
1091Eigen [#f1]_ is C++ header-based library for dense and sparse linear algebra. Due to
1092its popularity and widespread adoption, pybind11 provides transparent
1093conversion support between Eigen and Scientific Python linear algebra data types.
1094
1095Specifically, when including the optional header file :file:`pybind11/eigen.h`,
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001096pybind11 will automatically and transparently convert
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001097
10981. Static and dynamic Eigen dense vectors and matrices to instances of
1099 ``numpy.ndarray`` (and vice versa).
1100
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -040011011. Returned matrix expressions such as blocks (including columns or rows) and
1102 diagonals will be converted to ``numpy.ndarray`` of the expression
1103 values.
1104
11051. Returned matrix-like objects such as Eigen::DiagonalMatrix or
1106 Eigen::SelfAdjointView will be converted to ``numpy.ndarray`` containing the
1107 expressed value.
1108
Wenzel Jakob9e0a0562016-05-05 20:33:54 +020011091. Eigen sparse vectors and matrices to instances of
1110 ``scipy.sparse.csr_matrix``/``scipy.sparse.csc_matrix`` (and vice versa).
1111
1112This makes it possible to bind most kinds of functions that rely on these types.
1113One major caveat are functions that take Eigen matrices *by reference* and modify
1114them somehow, in which case the information won't be propagated to the caller.
1115
1116.. code-block:: cpp
1117
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001118 /* The Python bindings of these functions won't replicate
1119 the intended effect of modifying the function arguments */
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001120 void scale_by_2(Eigen::Vector3f &v) {
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001121 v *= 2;
1122 }
1123 void scale_by_2(Eigen::Ref<Eigen::MatrixXd> &v) {
1124 v *= 2;
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001125 }
1126
1127To see why this is, refer to the section on :ref:`opaque` (although that
1128section specifically covers STL data types, the underlying issue is the same).
1129The next two sections discuss an efficient alternative for exposing the
1130underlying native Eigen types as opaque objects in a way that still integrates
1131with NumPy and SciPy.
1132
1133.. [#f1] http://eigen.tuxfamily.org
1134
1135.. seealso::
1136
1137 The file :file:`example/eigen.cpp` contains a complete example that
1138 shows how to pass Eigen sparse and dense data types in more detail.
1139
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001140Buffer protocol
1141===============
1142
1143Python supports an extremely general and convenient approach for exchanging
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001144data between plugin libraries. Types can expose a buffer view [#f2]_, which
1145provides fast direct access to the raw internal data representation. Suppose we
1146want to bind the following simplistic Matrix class:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001147
1148.. code-block:: cpp
1149
1150 class Matrix {
1151 public:
1152 Matrix(size_t rows, size_t cols) : m_rows(rows), m_cols(cols) {
1153 m_data = new float[rows*cols];
1154 }
1155 float *data() { return m_data; }
1156 size_t rows() const { return m_rows; }
1157 size_t cols() const { return m_cols; }
1158 private:
1159 size_t m_rows, m_cols;
1160 float *m_data;
1161 };
1162
1163The following binding code exposes the ``Matrix`` contents as a buffer object,
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001164making it possible to cast Matrices into NumPy arrays. It is even possible to
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001165completely avoid copy operations with Python expressions like
1166``np.array(matrix_instance, copy = False)``.
1167
1168.. code-block:: cpp
1169
1170 py::class_<Matrix>(m, "Matrix")
1171 .def_buffer([](Matrix &m) -> py::buffer_info {
1172 return py::buffer_info(
Wenzel Jakob876eeab2016-05-04 22:22:48 +02001173 m.data(), /* Pointer to buffer */
1174 sizeof(float), /* Size of one scalar */
1175 py::format_descriptor<float>::value, /* Python struct-style format descriptor */
1176 2, /* Number of dimensions */
1177 { m.rows(), m.cols() }, /* Buffer dimensions */
1178 { sizeof(float) * m.rows(), /* Strides (in bytes) for each index */
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001179 sizeof(float) }
1180 );
1181 });
1182
1183The snippet above binds a lambda function, which can create ``py::buffer_info``
1184description records on demand describing a given matrix. The contents of
1185``py::buffer_info`` mirror the Python buffer protocol specification.
1186
1187.. code-block:: cpp
1188
1189 struct buffer_info {
1190 void *ptr;
1191 size_t itemsize;
1192 std::string format;
1193 int ndim;
1194 std::vector<size_t> shape;
1195 std::vector<size_t> strides;
1196 };
1197
1198To create a C++ function that can take a Python buffer object as an argument,
1199simply use the type ``py::buffer`` as one of its arguments. Buffers can exist
1200in a great variety of configurations, hence some safety checks are usually
1201necessary in the function body. Below, you can see an basic example on how to
1202define a custom constructor for the Eigen double precision matrix
1203(``Eigen::MatrixXd``) type, which supports initialization from compatible
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001204buffer objects (e.g. a NumPy matrix).
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001205
1206.. code-block:: cpp
1207
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001208 /* Bind MatrixXd (or some other Eigen type) to Python */
1209 typedef Eigen::MatrixXd Matrix;
1210
1211 typedef Matrix::Scalar Scalar;
1212 constexpr bool rowMajor = Matrix::Flags & Eigen::RowMajorBit;
1213
1214 py::class_<Matrix>(m, "Matrix")
1215 .def("__init__", [](Matrix &m, py::buffer b) {
Wenzel Jakobe7628532016-05-05 10:04:44 +02001216 typedef Eigen::Stride<Eigen::Dynamic, Eigen::Dynamic> Strides;
Wenzel Jakobe7628532016-05-05 10:04:44 +02001217
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001218 /* Request a buffer descriptor from Python */
1219 py::buffer_info info = b.request();
1220
1221 /* Some sanity checks ... */
Wenzel Jakobe7628532016-05-05 10:04:44 +02001222 if (info.format != py::format_descriptor<Scalar>::value)
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001223 throw std::runtime_error("Incompatible format: expected a double array!");
1224
1225 if (info.ndim != 2)
1226 throw std::runtime_error("Incompatible buffer dimension!");
1227
Wenzel Jakobe7628532016-05-05 10:04:44 +02001228 auto strides = Strides(
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001229 info.strides[rowMajor ? 0 : 1] / sizeof(Scalar),
1230 info.strides[rowMajor ? 1 : 0] / sizeof(Scalar));
Wenzel Jakobe7628532016-05-05 10:04:44 +02001231
1232 auto map = Eigen::Map<Matrix, 0, Strides>(
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001233 static_cat<Scalar *>(info.ptr), info.shape[0], info.shape[1], strides);
Wenzel Jakobe7628532016-05-05 10:04:44 +02001234
1235 new (&m) Matrix(map);
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001236 });
1237
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001238For reference, the ``def_buffer()`` call for this Eigen data type should look
1239as follows:
1240
1241.. code-block:: cpp
1242
1243 .def_buffer([](Matrix &m) -> py::buffer_info {
1244 return py::buffer_info(
1245 m.data(), /* Pointer to buffer */
1246 sizeof(Scalar), /* Size of one scalar */
1247 /* Python struct-style format descriptor */
1248 py::format_descriptor<Scalar>::value,
1249 /* Number of dimensions */
1250 2,
1251 /* Buffer dimensions */
1252 { (size_t) m.rows(),
1253 (size_t) m.cols() },
1254 /* Strides (in bytes) for each index */
1255 { sizeof(Scalar) * (rowMajor ? m.cols() : 1),
1256 sizeof(Scalar) * (rowMajor ? 1 : m.rows()) }
1257 );
1258 })
1259
1260For a much easier approach of binding Eigen types (although with some
1261limitations), refer to the section on :ref:`eigen`.
1262
Wenzel Jakob93296692015-10-13 23:21:54 +02001263.. seealso::
1264
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001265 The file :file:`example/example-buffers.cpp` contains a complete example
1266 that demonstrates using the buffer protocol with pybind11 in more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +02001267
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001268.. [#f2] http://docs.python.org/3/c-api/buffer.html
Wenzel Jakob978e3762016-04-07 18:00:41 +02001269
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001270NumPy support
1271=============
1272
1273By exchanging ``py::buffer`` with ``py::array`` in the above snippet, we can
1274restrict the function so that it only accepts NumPy arrays (rather than any
Wenzel Jakob978e3762016-04-07 18:00:41 +02001275type of Python object satisfying the buffer protocol).
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001276
1277In many situations, we want to define a function which only accepts a NumPy
Wenzel Jakob93296692015-10-13 23:21:54 +02001278array of a certain data type. This is possible via the ``py::array_t<T>``
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001279template. For instance, the following function requires the argument to be a
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001280NumPy array containing double precision values.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001281
1282.. code-block:: cpp
1283
Wenzel Jakob93296692015-10-13 23:21:54 +02001284 void f(py::array_t<double> array);
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001285
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001286When it is invoked with a different type (e.g. an integer or a list of
1287integers), the binding code will attempt to cast the input into a NumPy array
1288of the requested type. Note that this feature requires the
1289:file:``pybind11/numpy.h`` header to be included.
1290
1291Data in NumPy arrays is not guaranteed to packed in a dense manner;
1292furthermore, entries can be separated by arbitrary column and row strides.
1293Sometimes, it can be useful to require a function to only accept dense arrays
1294using either the C (row-major) or Fortran (column-major) ordering. This can be
1295accomplished via a second template argument with values ``py::array::c_style``
1296or ``py::array::f_style``.
1297
1298.. code-block:: cpp
1299
Wenzel Jakobb47a9de2016-05-19 16:02:09 +02001300 void f(py::array_t<double, py::array::c_style | py::array::forcecast> array);
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001301
Wenzel Jakobb47a9de2016-05-19 16:02:09 +02001302The ``py::array::forcecast`` argument is the default value of the second
1303template paramenter, and it ensures that non-conforming arguments are converted
1304into an array satisfying the specified requirements instead of trying the next
1305function overload.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001306
1307Vectorizing functions
1308=====================
1309
1310Suppose we want to bind a function with the following signature to Python so
1311that it can process arbitrary NumPy array arguments (vectors, matrices, general
1312N-D arrays) in addition to its normal arguments:
1313
1314.. code-block:: cpp
1315
1316 double my_func(int x, float y, double z);
1317
Wenzel Jakob8f4eb002015-10-15 18:13:33 +02001318After including the ``pybind11/numpy.h`` header, this is extremely simple:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001319
1320.. code-block:: cpp
1321
1322 m.def("vectorized_func", py::vectorize(my_func));
1323
1324Invoking the function like below causes 4 calls to be made to ``my_func`` with
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001325each of the array elements. The significant advantage of this compared to
Wenzel Jakob978e3762016-04-07 18:00:41 +02001326solutions like ``numpy.vectorize()`` is that the loop over the elements runs
1327entirely on the C++ side and can be crunched down into a tight, optimized loop
1328by the compiler. The result is returned as a NumPy array of type
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001329``numpy.dtype.float64``.
1330
Wenzel Jakob99279f72016-06-03 11:19:29 +02001331.. code-block:: pycon
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001332
1333 >>> x = np.array([[1, 3],[5, 7]])
1334 >>> y = np.array([[2, 4],[6, 8]])
1335 >>> z = 3
1336 >>> result = vectorized_func(x, y, z)
1337
1338The scalar argument ``z`` is transparently replicated 4 times. The input
1339arrays ``x`` and ``y`` are automatically converted into the right types (they
1340are of type ``numpy.dtype.int64`` but need to be ``numpy.dtype.int32`` and
1341``numpy.dtype.float32``, respectively)
1342
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001343Sometimes we might want to explicitly exclude an argument from the vectorization
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001344because it makes little sense to wrap it in a NumPy array. For instance,
1345suppose the function signature was
1346
1347.. code-block:: cpp
1348
1349 double my_func(int x, float y, my_custom_type *z);
1350
1351This can be done with a stateful Lambda closure:
1352
1353.. code-block:: cpp
1354
1355 // Vectorize a lambda function with a capture object (e.g. to exclude some arguments from the vectorization)
1356 m.def("vectorized_func",
Wenzel Jakob93296692015-10-13 23:21:54 +02001357 [](py::array_t<int> x, py::array_t<float> y, my_custom_type *z) {
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001358 auto stateful_closure = [z](int x, float y) { return my_func(x, y, z); };
1359 return py::vectorize(stateful_closure)(x, y);
1360 }
1361 );
1362
Wenzel Jakob61587162016-01-18 22:38:52 +01001363In cases where the computation is too complicated to be reduced to
1364``vectorize``, it will be necessary to create and access the buffer contents
1365manually. The following snippet contains a complete example that shows how this
1366works (the code is somewhat contrived, since it could have been done more
1367simply using ``vectorize``).
1368
1369.. code-block:: cpp
1370
1371 #include <pybind11/pybind11.h>
1372 #include <pybind11/numpy.h>
1373
1374 namespace py = pybind11;
1375
1376 py::array_t<double> add_arrays(py::array_t<double> input1, py::array_t<double> input2) {
1377 auto buf1 = input1.request(), buf2 = input2.request();
1378
1379 if (buf1.ndim != 1 || buf2.ndim != 1)
1380 throw std::runtime_error("Number of dimensions must be one");
1381
1382 if (buf1.shape[0] != buf2.shape[0])
1383 throw std::runtime_error("Input shapes must match");
1384
1385 auto result = py::array(py::buffer_info(
1386 nullptr, /* Pointer to data (nullptr -> ask NumPy to allocate!) */
1387 sizeof(double), /* Size of one item */
Wenzel Jakobf38f3592016-07-19 17:48:42 +02001388 py::format_descriptor<double>::value, /* Buffer format */
Wenzel Jakob61587162016-01-18 22:38:52 +01001389 buf1.ndim, /* How many dimensions? */
1390 { buf1.shape[0] }, /* Number of elements for each dimension */
1391 { sizeof(double) } /* Strides for each dimension */
1392 ));
1393
1394 auto buf3 = result.request();
1395
1396 double *ptr1 = (double *) buf1.ptr,
1397 *ptr2 = (double *) buf2.ptr,
1398 *ptr3 = (double *) buf3.ptr;
1399
1400 for (size_t idx = 0; idx < buf1.shape[0]; idx++)
1401 ptr3[idx] = ptr1[idx] + ptr2[idx];
1402
1403 return result;
1404 }
1405
1406 PYBIND11_PLUGIN(test) {
1407 py::module m("test");
1408 m.def("add_arrays", &add_arrays, "Add two NumPy arrays");
1409 return m.ptr();
1410 }
1411
Wenzel Jakob93296692015-10-13 23:21:54 +02001412.. seealso::
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001413
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001414 The file :file:`example/example-numpy-vectorize.cpp` contains a complete
1415 example that demonstrates using :func:`vectorize` in more detail.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001416
Wenzel Jakob93296692015-10-13 23:21:54 +02001417Functions taking Python objects as arguments
1418============================================
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001419
Wenzel Jakob93296692015-10-13 23:21:54 +02001420pybind11 exposes all major Python types using thin C++ wrapper classes. These
1421wrapper classes can also be used as parameters of functions in bindings, which
1422makes it possible to directly work with native Python types on the C++ side.
1423For instance, the following statement iterates over a Python ``dict``:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001424
Wenzel Jakob93296692015-10-13 23:21:54 +02001425.. code-block:: cpp
1426
1427 void print_dict(py::dict dict) {
1428 /* Easily interact with Python types */
1429 for (auto item : dict)
1430 std::cout << "key=" << item.first << ", "
1431 << "value=" << item.second << std::endl;
1432 }
1433
1434Available types include :class:`handle`, :class:`object`, :class:`bool_`,
Wenzel Jakob27e8e102016-01-17 22:36:37 +01001435:class:`int_`, :class:`float_`, :class:`str`, :class:`bytes`, :class:`tuple`,
Wenzel Jakobf64feaf2016-04-28 14:33:45 +02001436:class:`list`, :class:`dict`, :class:`slice`, :class:`none`, :class:`capsule`,
1437:class:`iterable`, :class:`iterator`, :class:`function`, :class:`buffer`,
1438:class:`array`, and :class:`array_t`.
Wenzel Jakob93296692015-10-13 23:21:54 +02001439
Wenzel Jakob436b7312015-10-20 01:04:30 +02001440In this kind of mixed code, it is often necessary to convert arbitrary C++
1441types to Python, which can be done using :func:`cast`:
1442
1443.. code-block:: cpp
1444
1445 MyClass *cls = ..;
1446 py::object obj = py::cast(cls);
1447
1448The reverse direction uses the following syntax:
1449
1450.. code-block:: cpp
1451
1452 py::object obj = ...;
1453 MyClass *cls = obj.cast<MyClass *>();
1454
1455When conversion fails, both directions throw the exception :class:`cast_error`.
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001456It is also possible to call python functions via ``operator()``.
1457
1458.. code-block:: cpp
1459
1460 py::function f = <...>;
1461 py::object result_py = f(1234, "hello", some_instance);
1462 MyClass &result = result_py.cast<MyClass>();
1463
1464The special ``f(*args)`` and ``f(*args, **kwargs)`` syntax is also supported to
1465supply arbitrary argument and keyword lists, although these cannot be mixed
1466with other parameters.
1467
1468.. code-block:: cpp
1469
1470 py::function f = <...>;
1471 py::tuple args = py::make_tuple(1234);
1472 py::dict kwargs;
1473 kwargs["y"] = py::cast(5678);
1474 py::object result = f(*args, **kwargs);
Wenzel Jakob436b7312015-10-20 01:04:30 +02001475
Wenzel Jakob93296692015-10-13 23:21:54 +02001476.. seealso::
1477
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001478 The file :file:`example/example-python-types.cpp` contains a complete
1479 example that demonstrates passing native Python types in more detail. The
1480 file :file:`example/example-arg-keywords-and-defaults.cpp` discusses usage
1481 of ``args`` and ``kwargs``.
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001482
1483Default arguments revisited
1484===========================
1485
1486The section on :ref:`default_args` previously discussed basic usage of default
1487arguments using pybind11. One noteworthy aspect of their implementation is that
1488default arguments are converted to Python objects right at declaration time.
1489Consider the following example:
1490
1491.. code-block:: cpp
1492
1493 py::class_<MyClass>("MyClass")
1494 .def("myFunction", py::arg("arg") = SomeType(123));
1495
1496In this case, pybind11 must already be set up to deal with values of the type
1497``SomeType`` (via a prior instantiation of ``py::class_<SomeType>``), or an
1498exception will be thrown.
1499
1500Another aspect worth highlighting is that the "preview" of the default argument
1501in the function signature is generated using the object's ``__repr__`` method.
1502If not available, the signature may not be very helpful, e.g.:
1503
Wenzel Jakob99279f72016-06-03 11:19:29 +02001504.. code-block:: pycon
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001505
1506 FUNCTIONS
1507 ...
1508 | myFunction(...)
Wenzel Jakob48548ea2016-01-17 22:36:44 +01001509 | Signature : (MyClass, arg : SomeType = <SomeType object at 0x101b7b080>) -> NoneType
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001510 ...
1511
1512The first way of addressing this is by defining ``SomeType.__repr__``.
1513Alternatively, it is possible to specify the human-readable preview of the
1514default argument manually using the ``arg_t`` notation:
1515
1516.. code-block:: cpp
1517
1518 py::class_<MyClass>("MyClass")
1519 .def("myFunction", py::arg_t<SomeType>("arg", SomeType(123), "SomeType(123)"));
1520
Wenzel Jakobc769fce2016-03-03 12:03:30 +01001521Sometimes it may be necessary to pass a null pointer value as a default
1522argument. In this case, remember to cast it to the underlying type in question,
1523like so:
1524
1525.. code-block:: cpp
1526
1527 py::class_<MyClass>("MyClass")
1528 .def("myFunction", py::arg("arg") = (SomeType *) nullptr);
1529
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001530Binding functions that accept arbitrary numbers of arguments and keywords arguments
1531===================================================================================
1532
1533Python provides a useful mechanism to define functions that accept arbitrary
1534numbers of arguments and keyword arguments:
1535
1536.. code-block:: cpp
1537
1538 def generic(*args, **kwargs):
1539 # .. do something with args and kwargs
1540
1541Such functions can also be created using pybind11:
1542
1543.. code-block:: cpp
1544
1545 void generic(py::args args, py::kwargs kwargs) {
1546 /// .. do something with args
1547 if (kwargs)
1548 /// .. do something with kwargs
1549 }
1550
1551 /// Binding code
1552 m.def("generic", &generic);
1553
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001554(See ``example/example-arg-keywords-and-defaults.cpp``). The class ``py::args``
1555derives from ``py::list`` and ``py::kwargs`` derives from ``py::dict`` Note
1556that the ``kwargs`` argument is invalid if no keyword arguments were actually
1557provided. Please refer to the other examples for details on how to iterate
1558over these, and on how to cast their entries into C++ objects.
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001559
Wenzel Jakob3764e282016-08-01 23:34:48 +02001560.. warning::
1561
1562 Unlike Python, pybind11 does not allow combining normal parameters with the
1563 ``args`` / ``kwargs`` special parameters.
1564
Wenzel Jakob2dfbade2016-01-17 22:36:37 +01001565Partitioning code over multiple extension modules
1566=================================================
1567
Wenzel Jakob90d2f5e2016-04-11 14:30:11 +02001568It's straightforward to split binding code over multiple extension modules,
1569while referencing types that are declared elsewhere. Everything "just" works
1570without any special precautions. One exception to this rule occurs when
1571extending a type declared in another extension module. Recall the basic example
1572from Section :ref:`inheritance`.
Wenzel Jakob2dfbade2016-01-17 22:36:37 +01001573
1574.. code-block:: cpp
1575
1576 py::class_<Pet> pet(m, "Pet");
1577 pet.def(py::init<const std::string &>())
1578 .def_readwrite("name", &Pet::name);
1579
1580 py::class_<Dog>(m, "Dog", pet /* <- specify parent */)
1581 .def(py::init<const std::string &>())
1582 .def("bark", &Dog::bark);
1583
1584Suppose now that ``Pet`` bindings are defined in a module named ``basic``,
1585whereas the ``Dog`` bindings are defined somewhere else. The challenge is of
1586course that the variable ``pet`` is not available anymore though it is needed
1587to indicate the inheritance relationship to the constructor of ``class_<Dog>``.
1588However, it can be acquired as follows:
1589
1590.. code-block:: cpp
1591
1592 py::object pet = (py::object) py::module::import("basic").attr("Pet");
1593
1594 py::class_<Dog>(m, "Dog", pet)
1595 .def(py::init<const std::string &>())
1596 .def("bark", &Dog::bark);
1597
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001598Alternatively, we can rely on the ``base`` tag, which performs an automated
1599lookup of the corresponding Python type. However, this also requires invoking
1600the ``import`` function once to ensure that the pybind11 binding code of the
1601module ``basic`` has been executed.
1602
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001603.. code-block:: cpp
1604
1605 py::module::import("basic");
1606
1607 py::class_<Dog>(m, "Dog", py::base<Pet>())
1608 .def(py::init<const std::string &>())
1609 .def("bark", &Dog::bark);
Wenzel Jakobeda978e2016-03-15 15:05:40 +01001610
Wenzel Jakob978e3762016-04-07 18:00:41 +02001611Naturally, both methods will fail when there are cyclic dependencies.
1612
Wenzel Jakob90d2f5e2016-04-11 14:30:11 +02001613Note that compiling code which has its default symbol visibility set to
1614*hidden* (e.g. via the command line flag ``-fvisibility=hidden`` on GCC/Clang) can interfere with the
1615ability to access types defined in another extension module. Workarounds
1616include changing the global symbol visibility (not recommended, because it will
1617lead unnecessarily large binaries) or manually exporting types that are
1618accessed by multiple extension modules:
1619
1620.. code-block:: cpp
1621
1622 #ifdef _WIN32
1623 # define EXPORT_TYPE __declspec(dllexport)
1624 #else
1625 # define EXPORT_TYPE __attribute__ ((visibility("default")))
1626 #endif
1627
1628 class EXPORT_TYPE Dog : public Animal {
1629 ...
1630 };
1631
1632
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001633Pickling support
1634================
1635
1636Python's ``pickle`` module provides a powerful facility to serialize and
1637de-serialize a Python object graph into a binary data stream. To pickle and
Wenzel Jakob3d0e6ff2016-04-13 11:48:10 +02001638unpickle C++ classes using pybind11, two additional functions must be provided.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001639Suppose the class in question has the following signature:
1640
1641.. code-block:: cpp
1642
1643 class Pickleable {
1644 public:
1645 Pickleable(const std::string &value) : m_value(value) { }
1646 const std::string &value() const { return m_value; }
1647
1648 void setExtra(int extra) { m_extra = extra; }
1649 int extra() const { return m_extra; }
1650 private:
1651 std::string m_value;
1652 int m_extra = 0;
1653 };
1654
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001655The binding code including the requisite ``__setstate__`` and ``__getstate__`` methods [#f3]_
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001656looks as follows:
1657
1658.. code-block:: cpp
1659
1660 py::class_<Pickleable>(m, "Pickleable")
1661 .def(py::init<std::string>())
1662 .def("value", &Pickleable::value)
1663 .def("extra", &Pickleable::extra)
1664 .def("setExtra", &Pickleable::setExtra)
1665 .def("__getstate__", [](const Pickleable &p) {
1666 /* Return a tuple that fully encodes the state of the object */
1667 return py::make_tuple(p.value(), p.extra());
1668 })
1669 .def("__setstate__", [](Pickleable &p, py::tuple t) {
1670 if (t.size() != 2)
1671 throw std::runtime_error("Invalid state!");
1672
Wenzel Jakobd40885a2016-04-13 13:30:05 +02001673 /* Invoke the in-place constructor. Note that this is needed even
1674 when the object just has a trivial default constructor */
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001675 new (&p) Pickleable(t[0].cast<std::string>());
1676
1677 /* Assign any additional state */
1678 p.setExtra(t[1].cast<int>());
1679 });
1680
1681An instance can now be pickled as follows:
1682
1683.. code-block:: python
1684
1685 try:
1686 import cPickle as pickle # Use cPickle on Python 2.7
1687 except ImportError:
1688 import pickle
1689
1690 p = Pickleable("test_value")
1691 p.setExtra(15)
Wenzel Jakob81e09752016-04-30 23:13:03 +02001692 data = pickle.dumps(p, 2)
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001693
Wenzel Jakob81e09752016-04-30 23:13:03 +02001694Note that only the cPickle module is supported on Python 2.7. The second
1695argument to ``dumps`` is also crucial: it selects the pickle protocol version
16962, since the older version 1 is not supported. Newer versions are also fine—for
1697instance, specify ``-1`` to always use the latest available version. Beware:
1698failure to follow these instructions will cause important pybind11 memory
1699allocation routines to be skipped during unpickling, which will likely lead to
1700memory corruption and/or segmentation faults.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001701
1702.. seealso::
1703
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001704 The file :file:`example/example-pickling.cpp` contains a complete example
1705 that demonstrates how to pickle and unpickle types using pybind11 in more
1706 detail.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001707
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001708.. [#f3] http://docs.python.org/3/library/pickle.html#pickling-class-instances
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001709
1710Generating documentation using Sphinx
1711=====================================
1712
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001713Sphinx [#f4]_ has the ability to inspect the signatures and documentation
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001714strings in pybind11-based extension modules to automatically generate beautiful
Wenzel Jakobca8dc082016-06-03 14:24:17 +02001715documentation in a variety formats. The python_example repository [#f5]_ contains a
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001716simple example repository which uses this approach.
1717
1718There are two potential gotchas when using this approach: first, make sure that
1719the resulting strings do not contain any :kbd:`TAB` characters, which break the
1720docstring parsing routines. You may want to use C++11 raw string literals,
1721which are convenient for multi-line comments. Conveniently, any excess
1722indentation will be automatically be removed by Sphinx. However, for this to
1723work, it is important that all lines are indented consistently, i.e.:
1724
1725.. code-block:: cpp
1726
1727 // ok
1728 m.def("foo", &foo, R"mydelimiter(
1729 The foo function
1730
1731 Parameters
1732 ----------
1733 )mydelimiter");
1734
1735 // *not ok*
1736 m.def("foo", &foo, R"mydelimiter(The foo function
1737
1738 Parameters
1739 ----------
1740 )mydelimiter");
1741
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001742.. [#f4] http://www.sphinx-doc.org
Wenzel Jakobca8dc082016-06-03 14:24:17 +02001743.. [#f5] http://github.com/pybind/python_example
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001744
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001745Evaluating Python expressions from strings and files
1746====================================================
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001747
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001748pybind11 provides the :func:`eval` and :func:`eval_file` functions to evaluate
1749Python expressions and statements. The following example illustrates how they
1750can be used.
1751
1752Both functions accept a template parameter that describes how the argument
1753should be interpreted. Possible choices include ``eval_expr`` (isolated
1754expression), ``eval_single_statement`` (a single statement, return value is
1755always ``none``), and ``eval_statements`` (sequence of statements, return value
1756is always ``none``).
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001757
1758.. code-block:: cpp
1759
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001760 // At beginning of file
1761 #include <pybind11/eval.h>
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001762
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001763 ...
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001764
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001765 // Evaluate in scope of main module
1766 py::object scope = py::module::import("__main__").attr("__dict__");
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001767
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001768 // Evaluate an isolated expression
1769 int result = py::eval("my_variable + 10", scope).cast<int>();
1770
1771 // Evaluate a sequence of statements
1772 py::eval<py::eval_statements>(
1773 "print('Hello')\n"
1774 "print('world!');",
1775 scope);
1776
1777 // Evaluate the statements in an separate Python file on disk
1778 py::eval_file("script.py", scope);
1779