blob: 382fdf3e91f9d41500cbb7cef5c4179e46721e8b [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;
Wenzel Jakob382484a2016-09-10 15:28:37 +090093 }, py::is_operator())
Wenzel Jakob93296692015-10-13 23:21:54 +020094
95This can be useful for exposing additional operators that don't exist on the
Wenzel Jakob382484a2016-09-10 15:28:37 +090096C++ side, or to perform other types of customization. The ``py::is_operator``
97flag marker is needed to inform pybind11 that this is an operator, which
98returns ``NotImplemented`` when invoked with incompatible arguments rather than
99throwing a type error.
Wenzel Jakob93296692015-10-13 23:21:54 +0200100
101.. note::
102
103 To use the more convenient ``py::self`` notation, the additional
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200104 header file :file:`pybind11/operators.h` must be included.
Wenzel Jakob93296692015-10-13 23:21:54 +0200105
106.. seealso::
107
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200108 The file :file:`tests/test_operator_overloading.cpp` contains a
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400109 complete example that demonstrates how to work with overloaded operators in
110 more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +0200111
112Callbacks and passing anonymous functions
113=========================================
114
115The C++11 standard brought lambda functions and the generic polymorphic
116function wrapper ``std::function<>`` to the C++ programming language, which
117enable powerful new ways of working with functions. Lambda functions come in
118two flavors: stateless lambda function resemble classic function pointers that
119link to an anonymous piece of code, while stateful lambda functions
120additionally depend on captured variables that are stored in an anonymous
121*lambda closure object*.
122
123Here is a simple example of a C++ function that takes an arbitrary function
124(stateful or stateless) with signature ``int -> int`` as an argument and runs
125it with the value 10.
126
127.. code-block:: cpp
128
129 int func_arg(const std::function<int(int)> &f) {
130 return f(10);
131 }
132
133The example below is more involved: it takes a function of signature ``int -> int``
134and returns another function of the same kind. The return value is a stateful
135lambda function, which stores the value ``f`` in the capture object and adds 1 to
136its return value upon execution.
137
138.. code-block:: cpp
139
140 std::function<int(int)> func_ret(const std::function<int(int)> &f) {
141 return [f](int i) {
142 return f(i) + 1;
143 };
144 }
145
Brad Harmon835fc062016-06-16 13:19:15 -0500146This example demonstrates using python named parameters in C++ callbacks which
147requires using ``py::cpp_function`` as a wrapper. Usage is similar to defining
148methods of classes:
149
150.. code-block:: cpp
151
152 py::cpp_function func_cpp() {
153 return py::cpp_function([](int i) { return i+1; },
154 py::arg("number"));
155 }
156
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200157After including the extra header file :file:`pybind11/functional.h`, it is almost
Brad Harmon835fc062016-06-16 13:19:15 -0500158trivial to generate binding code for all of these functions.
Wenzel Jakob93296692015-10-13 23:21:54 +0200159
160.. code-block:: cpp
161
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200162 #include <pybind11/functional.h>
Wenzel Jakob93296692015-10-13 23:21:54 +0200163
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200164 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200165 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200166
167 m.def("func_arg", &func_arg);
168 m.def("func_ret", &func_ret);
Brad Harmon835fc062016-06-16 13:19:15 -0500169 m.def("func_cpp", &func_cpp);
Wenzel Jakob93296692015-10-13 23:21:54 +0200170
171 return m.ptr();
172 }
173
174The following interactive session shows how to call them from Python.
175
Wenzel Jakob99279f72016-06-03 11:19:29 +0200176.. code-block:: pycon
Wenzel Jakob93296692015-10-13 23:21:54 +0200177
178 $ python
179 >>> import example
180 >>> def square(i):
181 ... return i * i
182 ...
183 >>> example.func_arg(square)
184 100L
185 >>> square_plus_1 = example.func_ret(square)
186 >>> square_plus_1(4)
187 17L
Brad Harmon835fc062016-06-16 13:19:15 -0500188 >>> plus_1 = func_cpp()
189 >>> plus_1(number=43)
190 44L
Wenzel Jakob93296692015-10-13 23:21:54 +0200191
Wenzel Jakoba4175d62015-11-17 08:30:34 +0100192.. warning::
193
194 Keep in mind that passing a function from C++ to Python (or vice versa)
195 will instantiate a piece of wrapper code that translates function
Wenzel Jakob954b7932016-07-10 10:13:18 +0200196 invocations between the two languages. Naturally, this translation
197 increases the computational cost of each function call somewhat. A
198 problematic situation can arise when a function is copied back and forth
199 between Python and C++ many times in a row, in which case the underlying
200 wrappers will accumulate correspondingly. The resulting long sequence of
201 C++ -> Python -> C++ -> ... roundtrips can significantly decrease
202 performance.
203
204 There is one exception: pybind11 detects case where a stateless function
205 (i.e. a function pointer or a lambda function without captured variables)
206 is passed as an argument to another C++ function exposed in Python. In this
207 case, there is no overhead. Pybind11 will extract the underlying C++
208 function pointer from the wrapped function to sidestep a potential C++ ->
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200209 Python -> C++ roundtrip. This is demonstrated in :file:`tests/test_callbacks.cpp`.
Wenzel Jakob954b7932016-07-10 10:13:18 +0200210
211.. note::
212
213 This functionality is very useful when generating bindings for callbacks in
214 C++ libraries (e.g. GUI libraries, asynchronous networking libraries, etc.).
215
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200216 The file :file:`tests/test_callbacks.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400217 that demonstrates how to work with callbacks and anonymous functions in
218 more detail.
Wenzel Jakoba4175d62015-11-17 08:30:34 +0100219
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200220Overriding virtual functions in Python
221======================================
222
Wenzel Jakob93296692015-10-13 23:21:54 +0200223Suppose that a C++ class or interface has a virtual function that we'd like to
224to override from within Python (we'll focus on the class ``Animal``; ``Dog`` is
225given as a specific example of how one would do this with traditional C++
226code).
227
228.. code-block:: cpp
229
230 class Animal {
231 public:
232 virtual ~Animal() { }
233 virtual std::string go(int n_times) = 0;
234 };
235
236 class Dog : public Animal {
237 public:
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400238 std::string go(int n_times) override {
Wenzel Jakob93296692015-10-13 23:21:54 +0200239 std::string result;
240 for (int i=0; i<n_times; ++i)
241 result += "woof! ";
242 return result;
243 }
244 };
245
246Let's also suppose that we are given a plain function which calls the
247function ``go()`` on an arbitrary ``Animal`` instance.
248
249.. code-block:: cpp
250
251 std::string call_go(Animal *animal) {
252 return animal->go(3);
253 }
254
255Normally, the binding code for these classes would look as follows:
256
257.. code-block:: cpp
258
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200259 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200260 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200261
262 py::class_<Animal> animal(m, "Animal");
263 animal
264 .def("go", &Animal::go);
265
266 py::class_<Dog>(m, "Dog", animal)
267 .def(py::init<>());
268
269 m.def("call_go", &call_go);
270
271 return m.ptr();
272 }
273
274However, these bindings are impossible to extend: ``Animal`` is not
275constructible, and we clearly require some kind of "trampoline" that
276redirects virtual calls back to Python.
277
278Defining a new type of ``Animal`` from within Python is possible but requires a
279helper class that is defined as follows:
280
281.. code-block:: cpp
282
283 class PyAnimal : public Animal {
284 public:
285 /* Inherit the constructors */
286 using Animal::Animal;
287
288 /* Trampoline (need one for each virtual function) */
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400289 std::string go(int n_times) override {
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200290 PYBIND11_OVERLOAD_PURE(
Wenzel Jakob93296692015-10-13 23:21:54 +0200291 std::string, /* Return type */
292 Animal, /* Parent class */
293 go, /* Name of function */
294 n_times /* Argument(s) */
295 );
296 }
297 };
298
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200299The macro :func:`PYBIND11_OVERLOAD_PURE` should be used for pure virtual
300functions, and :func:`PYBIND11_OVERLOAD` should be used for functions which have
Wenzel Jakob0d3fc352016-07-08 10:52:10 +0200301a default implementation.
Wenzel Jakob1e3be732016-05-24 23:42:05 +0200302
303There are also two alternate macros :func:`PYBIND11_OVERLOAD_PURE_NAME` and
Jason Rhinelander64830e32016-08-29 16:58:59 -0400304:func:`PYBIND11_OVERLOAD_NAME` which take a string-valued name argument between
305the *Parent class* and *Name of the function* slots. This is useful when the
306C++ and Python versions of the function have different names, e.g.
307``operator()`` vs ``__call__``.
Wenzel Jakob1e3be732016-05-24 23:42:05 +0200308
309The binding code also needs a few minor adaptations (highlighted):
Wenzel Jakob93296692015-10-13 23:21:54 +0200310
311.. code-block:: cpp
312 :emphasize-lines: 4,6,7
313
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200314 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200315 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200316
Jason Rhinelander5fffe202016-09-06 12:17:06 -0400317 py::class_<Animal, PyAnimal /* <--- trampoline*/> animal(m, "Animal");
Wenzel Jakob93296692015-10-13 23:21:54 +0200318 animal
Wenzel Jakob93296692015-10-13 23:21:54 +0200319 .def(py::init<>())
320 .def("go", &Animal::go);
321
322 py::class_<Dog>(m, "Dog", animal)
323 .def(py::init<>());
324
325 m.def("call_go", &call_go);
326
327 return m.ptr();
328 }
329
Wenzel Jakob86d825f2016-05-26 13:19:27 +0200330Importantly, pybind11 is made aware of the trampoline trampoline helper class
Jason Rhinelander5fffe202016-09-06 12:17:06 -0400331by specifying it as an extra template argument to :class:`class_`. (This can
332also be combined with other template arguments such as a custom holder type;
333the order of template types does not matter). Following this, we are able to
334define a constructor as usual.
Wenzel Jakob93296692015-10-13 23:21:54 +0200335
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400336Note, however, that the above is sufficient for allowing python classes to
337extend ``Animal``, but not ``Dog``: see ref:`virtual_and_inheritance` for the
338necessary steps required to providing proper overload support for inherited
339classes.
340
Wenzel Jakob93296692015-10-13 23:21:54 +0200341The Python session below shows how to override ``Animal::go`` and invoke it via
342a virtual method call.
343
Wenzel Jakob99279f72016-06-03 11:19:29 +0200344.. code-block:: pycon
Wenzel Jakob93296692015-10-13 23:21:54 +0200345
346 >>> from example import *
347 >>> d = Dog()
348 >>> call_go(d)
349 u'woof! woof! woof! '
350 >>> class Cat(Animal):
351 ... def go(self, n_times):
352 ... return "meow! " * n_times
353 ...
354 >>> c = Cat()
355 >>> call_go(c)
356 u'meow! meow! meow! '
357
Wenzel Jakob9bb97c12016-06-03 11:19:41 +0200358Please take a look at the :ref:`macro_notes` before using this feature.
Wenzel Jakobbd986fe2016-05-21 10:48:30 +0200359
Wenzel Jakob93296692015-10-13 23:21:54 +0200360.. seealso::
361
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200362 The file :file:`tests/test_virtual_functions.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400363 example that demonstrates how to override virtual functions using pybind11
364 in more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +0200365
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400366.. _virtual_and_inheritance:
367
368Combining virtual functions and inheritance
369===========================================
370
371When combining virtual methods with inheritance, you need to be sure to provide
372an override for each method for which you want to allow overrides from derived
373python classes. For example, suppose we extend the above ``Animal``/``Dog``
374example as follows:
375
376.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200377
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400378 class Animal {
379 public:
380 virtual std::string go(int n_times) = 0;
381 virtual std::string name() { return "unknown"; }
382 };
383 class Dog : public class Animal {
384 public:
385 std::string go(int n_times) override {
386 std::string result;
387 for (int i=0; i<n_times; ++i)
388 result += bark() + " ";
389 return result;
390 }
391 virtual std::string bark() { return "woof!"; }
392 };
393
394then the trampoline class for ``Animal`` must, as described in the previous
395section, override ``go()`` and ``name()``, but in order to allow python code to
396inherit properly from ``Dog``, we also need a trampoline class for ``Dog`` that
397overrides both the added ``bark()`` method *and* the ``go()`` and ``name()``
398methods inherited from ``Animal`` (even though ``Dog`` doesn't directly
399override the ``name()`` method):
400
401.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200402
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400403 class PyAnimal : public Animal {
404 public:
405 using Animal::Animal; // Inherit constructors
406 std::string go(int n_times) override { PYBIND11_OVERLOAD_PURE(std::string, Animal, go, n_times); }
407 std::string name() override { PYBIND11_OVERLOAD(std::string, Animal, name, ); }
408 };
409 class PyDog : public Dog {
410 public:
411 using Dog::Dog; // Inherit constructors
412 std::string go(int n_times) override { PYBIND11_OVERLOAD_PURE(std::string, Dog, go, n_times); }
413 std::string name() override { PYBIND11_OVERLOAD(std::string, Dog, name, ); }
414 std::string bark() override { PYBIND11_OVERLOAD(std::string, Dog, bark, ); }
415 };
416
417A registered class derived from a pybind11-registered class with virtual
418methods requires a similar trampoline class, *even if* it doesn't explicitly
419declare or override any virtual methods itself:
420
421.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200422
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400423 class Husky : public Dog {};
424 class PyHusky : public Husky {
425 using Dog::Dog; // Inherit constructors
426 std::string go(int n_times) override { PYBIND11_OVERLOAD_PURE(std::string, Husky, go, n_times); }
427 std::string name() override { PYBIND11_OVERLOAD(std::string, Husky, name, ); }
428 std::string bark() override { PYBIND11_OVERLOAD(std::string, Husky, bark, ); }
429 };
430
431There is, however, a technique that can be used to avoid this duplication
432(which can be especially helpful for a base class with several virtual
433methods). The technique involves using template trampoline classes, as
434follows:
435
436.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200437
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400438 template <class AnimalBase = Animal> class PyAnimal : public AnimalBase {
439 using AnimalBase::AnimalBase; // Inherit constructors
440 std::string go(int n_times) override { PYBIND11_OVERLOAD_PURE(std::string, AnimalBase, go, n_times); }
441 std::string name() override { PYBIND11_OVERLOAD(std::string, AnimalBase, name, ); }
442 };
443 template <class DogBase = Dog> class PyDog : public PyAnimal<DogBase> {
444 using PyAnimal<DogBase>::PyAnimal; // Inherit constructors
445 // Override PyAnimal's pure virtual go() with a non-pure one:
446 std::string go(int n_times) override { PYBIND11_OVERLOAD(std::string, DogBase, go, n_times); }
447 std::string bark() override { PYBIND11_OVERLOAD(std::string, DogBase, bark, ); }
448 };
449
450This technique has the advantage of requiring just one trampoline method to be
451declared per virtual method and pure virtual method override. It does,
452however, require the compiler to generate at least as many methods (and
453possibly more, if both pure virtual and overridden pure virtual methods are
454exposed, as above).
455
456The classes are then registered with pybind11 using:
457
458.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200459
Jason Rhinelander5fffe202016-09-06 12:17:06 -0400460 py::class_<Animal, PyAnimal<>> animal(m, "Animal");
461 py::class_<Dog, PyDog<>> dog(m, "Dog");
462 py::class_<Husky, PyDog<Husky>> husky(m, "Husky");
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400463 // ... add animal, dog, husky definitions
464
465Note that ``Husky`` did not require a dedicated trampoline template class at
466all, since it neither declares any new virtual methods nor provides any pure
467virtual method implementations.
468
469With either the repeated-virtuals or templated trampoline methods in place, you
470can now create a python class that inherits from ``Dog``:
471
472.. code-block:: python
473
474 class ShihTzu(Dog):
475 def bark(self):
476 return "yip!"
477
478.. seealso::
479
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200480 See the file :file:`tests/test_virtual_functions.cpp` for complete examples
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400481 using both the duplication and templated trampoline approaches.
482
Jason Rhinelanderec62d972016-09-09 02:42:51 -0400483Extended trampoline class functionality
484=======================================
485
486The trampoline classes described in the previous sections are, by default, only
487initialized when needed. More specifically, they are initialized when a python
488class actually inherits from a registered type (instead of merely creating an
489instance of the registered type), or when a registered constructor is only
490valid for the trampoline class but not the registered class. This is primarily
491for performance reasons: when the trampoline class is not needed for anything
492except virtual method dispatching, not initializing the trampoline class
493improves performance by avoiding needing to do a run-time check to see if the
494inheriting python instance has an overloaded method.
495
496Sometimes, however, it is useful to always initialize a trampoline class as an
497intermediate class that does more than just handle virtual method dispatching.
498For example, such a class might perform extra class initialization, extra
499destruction operations, and might define new members and methods to enable a
500more python-like interface to a class.
501
502In order to tell pybind11 that it should *always* initialize the trampoline
503class when creating new instances of a type, the class constructors should be
504declared using ``py::init_alias<Args, ...>()`` instead of the usual
505``py::init<Args, ...>()``. This forces construction via the trampoline class,
506ensuring member initialization and (eventual) destruction.
507
508.. seealso::
509
510 See the file :file:`tests/test_alias_initialization.cpp` for complete examples
511 showing both normal and forced trampoline instantiation.
512
Wenzel Jakob9bb97c12016-06-03 11:19:41 +0200513.. _macro_notes:
514
515General notes regarding convenience macros
516==========================================
517
518pybind11 provides a few convenience macros such as
519:func:`PYBIND11_MAKE_OPAQUE` and :func:`PYBIND11_DECLARE_HOLDER_TYPE`, and
520``PYBIND11_OVERLOAD_*``. Since these are "just" macros that are evaluated
521in the preprocessor (which has no concept of types), they *will* get confused
522by commas in a template argument such as ``PYBIND11_OVERLOAD(MyReturnValue<T1,
523T2>, myFunc)``. In this case, the preprocessor assumes that the comma indicates
524the beginnning of the next parameter. Use a ``typedef`` to bind the template to
525another name and use it in the macro to avoid this problem.
526
527
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100528Global Interpreter Lock (GIL)
529=============================
530
531The classes :class:`gil_scoped_release` and :class:`gil_scoped_acquire` can be
532used to acquire and release the global interpreter lock in the body of a C++
533function call. In this way, long-running C++ code can be parallelized using
534multiple Python threads. Taking the previous section as an example, this could
535be realized as follows (important changes highlighted):
536
537.. code-block:: cpp
538 :emphasize-lines: 8,9,33,34
539
540 class PyAnimal : public Animal {
541 public:
542 /* Inherit the constructors */
543 using Animal::Animal;
544
545 /* Trampoline (need one for each virtual function) */
546 std::string go(int n_times) {
547 /* Acquire GIL before calling Python code */
Wenzel Jakoba4caa852015-12-14 12:39:02 +0100548 py::gil_scoped_acquire acquire;
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100549
550 PYBIND11_OVERLOAD_PURE(
551 std::string, /* Return type */
552 Animal, /* Parent class */
553 go, /* Name of function */
554 n_times /* Argument(s) */
555 );
556 }
557 };
558
559 PYBIND11_PLUGIN(example) {
560 py::module m("example", "pybind11 example plugin");
561
Jason Rhinelander5fffe202016-09-06 12:17:06 -0400562 py::class_<Animal, PyAnimal> animal(m, "Animal");
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100563 animal
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100564 .def(py::init<>())
565 .def("go", &Animal::go);
566
567 py::class_<Dog>(m, "Dog", animal)
568 .def(py::init<>());
569
570 m.def("call_go", [](Animal *animal) -> std::string {
571 /* Release GIL before calling into (potentially long-running) C++ code */
Wenzel Jakoba4caa852015-12-14 12:39:02 +0100572 py::gil_scoped_release release;
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100573 return call_go(animal);
574 });
575
576 return m.ptr();
577 }
578
Wenzel Jakob93296692015-10-13 23:21:54 +0200579Passing STL data structures
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200580===========================
581
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200582When including the additional header file :file:`pybind11/stl.h`, conversions
Wenzel Jakob978e3762016-04-07 18:00:41 +0200583between ``std::vector<>``, ``std::list<>``, ``std::set<>``, and ``std::map<>``
584and the Python ``list``, ``set`` and ``dict`` data structures are automatically
585enabled. The types ``std::pair<>`` and ``std::tuple<>`` are already supported
586out of the box with just the core :file:`pybind11/pybind11.h` header.
Wenzel Jakob93296692015-10-13 23:21:54 +0200587
Wenzel Jakobfe342412016-09-06 13:02:29 +0900588The major downside of these implicit conversions is that containers must be
589converted (i.e. copied) on every Python->C++ and C++->Python transition, which
590can have implications on the program semantics and performance. Please read the
591next sections for more details and alternative approaches that avoid this.
Sergey Lyskov75204182016-08-29 22:50:38 -0400592
Wenzel Jakob93296692015-10-13 23:21:54 +0200593.. note::
594
Wenzel Jakobfe342412016-09-06 13:02:29 +0900595 Arbitrary nesting of any of these types is possible.
Wenzel Jakob93296692015-10-13 23:21:54 +0200596
597.. seealso::
598
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200599 The file :file:`tests/test_python_types.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400600 example that demonstrates how to pass STL data types in more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +0200601
Wenzel Jakobfe342412016-09-06 13:02:29 +0900602.. _opaque:
603
604Treating STL data structures as opaque objects
605==============================================
606
607pybind11 heavily relies on a template matching mechanism to convert parameters
608and return values that are constructed from STL data types such as vectors,
609linked lists, hash tables, etc. This even works in a recursive manner, for
610instance to deal with lists of hash maps of pairs of elementary and custom
611types, etc.
612
613However, a fundamental limitation of this approach is that internal conversions
614between Python and C++ types involve a copy operation that prevents
615pass-by-reference semantics. What does this mean?
616
617Suppose we bind the following function
618
619.. code-block:: cpp
620
621 void append_1(std::vector<int> &v) {
622 v.push_back(1);
623 }
624
625and call it from Python, the following happens:
626
627.. code-block:: pycon
628
629 >>> v = [5, 6]
630 >>> append_1(v)
631 >>> print(v)
632 [5, 6]
633
634As you can see, when passing STL data structures by reference, modifications
635are not propagated back the Python side. A similar situation arises when
636exposing STL data structures using the ``def_readwrite`` or ``def_readonly``
637functions:
638
639.. code-block:: cpp
640
641 /* ... definition ... */
642
643 class MyClass {
644 std::vector<int> contents;
645 };
646
647 /* ... binding code ... */
648
649 py::class_<MyClass>(m, "MyClass")
650 .def(py::init<>)
651 .def_readwrite("contents", &MyClass::contents);
652
653In this case, properties can be read and written in their entirety. However, an
654``append`` operaton involving such a list type has no effect:
655
656.. code-block:: pycon
657
658 >>> m = MyClass()
659 >>> m.contents = [5, 6]
660 >>> print(m.contents)
661 [5, 6]
662 >>> m.contents.append(7)
663 >>> print(m.contents)
664 [5, 6]
665
666Finally, the involved copy operations can be costly when dealing with very
667large lists. To deal with all of the above situations, pybind11 provides a
668macro named ``PYBIND11_MAKE_OPAQUE(T)`` that disables the template-based
669conversion machinery of types, thus rendering them *opaque*. The contents of
670opaque objects are never inspected or extracted, hence they *can* be passed by
671reference. For instance, to turn ``std::vector<int>`` into an opaque type, add
672the declaration
673
674.. code-block:: cpp
675
676 PYBIND11_MAKE_OPAQUE(std::vector<int>);
677
678before any binding code (e.g. invocations to ``class_::def()``, etc.). This
679macro must be specified at the top level (and outside of any namespaces), since
680it instantiates a partial template overload. If your binding code consists of
681multiple compilation units, it must be present in every file preceding any
682usage of ``std::vector<int>``. Opaque types must also have a corresponding
683``class_`` declaration to associate them with a name in Python, and to define a
684set of available operations, e.g.:
685
686.. code-block:: cpp
687
688 py::class_<std::vector<int>>(m, "IntVector")
689 .def(py::init<>())
690 .def("clear", &std::vector<int>::clear)
691 .def("pop_back", &std::vector<int>::pop_back)
692 .def("__len__", [](const std::vector<int> &v) { return v.size(); })
693 .def("__iter__", [](std::vector<int> &v) {
694 return py::make_iterator(v.begin(), v.end());
695 }, py::keep_alive<0, 1>()) /* Keep vector alive while iterator is used */
696 // ....
697
698The ability to expose STL containers as native Python objects is a fairly
699common request, hence pybind11 also provides an optional header file named
700:file:`pybind11/stl_bind.h` that does exactly this. The mapped containers try
701to match the behavior of their native Python counterparts as much as possible.
702
703The following example showcases usage of :file:`pybind11/stl_bind.h`:
704
705.. code-block:: cpp
706
707 // Don't forget this
708 #include <pybind11/stl_bind.h>
709
710 PYBIND11_MAKE_OPAQUE(std::vector<int>);
711 PYBIND11_MAKE_OPAQUE(std::map<std::string, double>);
712
713 // ...
714
715 // later in binding code:
716 py::bind_vector<std::vector<int>>(m, "VectorInt");
717 py::bind_map<std::map<std::string, double>>(m, "MapStringDouble");
718
719Please take a look at the :ref:`macro_notes` before using the
720``PYBIND11_MAKE_OPAQUE`` macro.
721
722.. seealso::
723
724 The file :file:`tests/test_opaque_types.cpp` contains a complete
725 example that demonstrates how to create and expose opaque types using
726 pybind11 in more detail.
727
728 The file :file:`tests/test_stl_binders.cpp` shows how to use the
729 convenience STL container wrappers.
730
731
Wenzel Jakobb2825952016-04-13 23:33:00 +0200732Binding sequence data types, iterators, the slicing protocol, etc.
733==================================================================
Wenzel Jakob93296692015-10-13 23:21:54 +0200734
735Please refer to the supplemental example for details.
736
737.. seealso::
738
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200739 The file :file:`tests/test_sequences_and_iterators.cpp` contains a
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400740 complete example that shows how to bind a sequence data type, including
741 length queries (``__len__``), iterators (``__iter__``), the slicing
742 protocol and other kinds of useful operations.
Wenzel Jakob93296692015-10-13 23:21:54 +0200743
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200744Return value policies
745=====================
746
Wenzel Jakob93296692015-10-13 23:21:54 +0200747Python and C++ use wildly different ways of managing the memory and lifetime of
748objects managed by them. This can lead to issues when creating bindings for
749functions that return a non-trivial type. Just by looking at the type
750information, it is not clear whether Python should take charge of the returned
751value and eventually free its resources, or if this is handled on the C++ side.
752For this reason, pybind11 provides a several `return value policy` annotations
753that can be passed to the :func:`module::def` and :func:`class_::def`
Wenzel Jakob61d67f02015-12-14 12:53:06 +0100754functions. The default policy is :enum:`return_value_policy::automatic`.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200755
Wenzel Jakobbf099582016-08-22 12:52:02 +0200756Return value policies can also be applied to properties, in which case the
757arguments must be passed through the :class:`cpp_function` constructor:
758
759.. code-block:: cpp
760
761 class_<MyClass>(m, "MyClass")
762 def_property("data"
763 py::cpp_function(&MyClass::getData, py::return_value_policy::copy),
764 py::cpp_function(&MyClass::setData)
765 );
766
767The following table provides an overview of the available return value policies:
768
Wenzel Jakobf64feaf2016-04-28 14:33:45 +0200769.. tabularcolumns:: |p{0.5\textwidth}|p{0.45\textwidth}|
770
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200771+--------------------------------------------------+----------------------------------------------------------------------------+
772| Return value policy | Description |
773+==================================================+============================================================================+
774| :enum:`return_value_policy::automatic` | This is the default return value policy, which falls back to the policy |
775| | :enum:`return_value_policy::take_ownership` when the return value is a |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200776| | pointer. Otherwise, it uses :enum:`return_value::move` or |
777| | :enum:`return_value::copy` for rvalue and lvalue references, respectively. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200778| | See below for a description of what all of these different policies do. |
779+--------------------------------------------------+----------------------------------------------------------------------------+
780| :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 +0200781| | return value is a pointer. This is the default conversion policy for |
782| | function arguments when calling Python functions manually from C++ code |
783| | (i.e. via handle::operator()). You probably won't need to use this. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200784+--------------------------------------------------+----------------------------------------------------------------------------+
785| :enum:`return_value_policy::take_ownership` | Reference an existing object (i.e. do not create a new copy) and take |
786| | ownership. Python will call the destructor and delete operator when the |
787| | object's reference count reaches zero. Undefined behavior ensues when the |
Wenzel Jakobf53e3002016-06-30 14:59:23 +0200788| | C++ side does the same. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200789+--------------------------------------------------+----------------------------------------------------------------------------+
790| :enum:`return_value_policy::copy` | Create a new copy of the returned object, which will be owned by Python. |
791| | This policy is comparably safe because the lifetimes of the two instances |
792| | are decoupled. |
793+--------------------------------------------------+----------------------------------------------------------------------------+
794| :enum:`return_value_policy::move` | Use ``std::move`` to move the return value contents into a new instance |
795| | that will be owned by Python. This policy is comparably safe because the |
796| | lifetimes of the two instances (move source and destination) are decoupled.|
797+--------------------------------------------------+----------------------------------------------------------------------------+
798| :enum:`return_value_policy::reference` | Reference an existing object, but do not take ownership. The C++ side is |
799| | responsible for managing the object's lifetime and deallocating it when |
800| | it is no longer used. Warning: undefined behavior will ensue when the C++ |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200801| | side deletes an object that is still referenced and used by Python. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200802+--------------------------------------------------+----------------------------------------------------------------------------+
Wenzel Jakobbf099582016-08-22 12:52:02 +0200803| :enum:`return_value_policy::reference_internal` | Indicates that the lifetime of the return value is tied to the lifetime |
804| | of a parent object, namely the implicit ``this``, or ``self`` argument of |
805| | the called method or property. Internally, this policy works just like |
806| | :enum:`return_value_policy::reference` but additionally applies a |
807| | ``keep_alive<0, 1>`` *call policy* (described in the next section) that |
808| | prevents the parent object from being garbage collected as long as the |
809| | return value is referenced by Python. This is the default policy for |
810| | property getters created via ``def_property``, ``def_readwrite``, etc.) |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200811+--------------------------------------------------+----------------------------------------------------------------------------+
Wenzel Jakob93296692015-10-13 23:21:54 +0200812
Wenzel Jakobfb6aed22016-07-18 20:29:53 +0200813.. warning::
814
Jason Rhinelanderefc2aa72016-08-10 11:38:33 -0400815 Code with invalid return value policies might access unitialized memory or
816 free data structures multiple times, which can lead to hard-to-debug
Wenzel Jakobfb6aed22016-07-18 20:29:53 +0200817 non-determinism and segmentation faults, hence it is worth spending the
818 time to understand all the different options in the table above.
819
Jason Rhinelanderefc2aa72016-08-10 11:38:33 -0400820One important aspect of the above policies is that they only apply to instances
821which pybind11 has *not* seen before, in which case the policy clarifies
822essential questions about the return value's lifetime and ownership. When
823pybind11 knows the instance already (as identified by its type and address in
Wenzel Jakobfb6aed22016-07-18 20:29:53 +0200824memory), it will return the existing Python object wrapper rather than creating
Wenzel Jakobbf099582016-08-22 12:52:02 +0200825a new copy.
nafur717df752016-06-28 18:07:11 +0200826
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200827.. note::
828
829 The next section on :ref:`call_policies` discusses *call policies* that can be
830 specified *in addition* to a return value policy from the list above. Call
831 policies indicate reference relationships that can involve both return values
832 and parameters of functions.
833
834.. note::
835
836 As an alternative to elaborate call policies and lifetime management logic,
837 consider using smart pointers (see the section on :ref:`smart_pointers` for
838 details). Smart pointers can tell whether an object is still referenced from
839 C++ or Python, which generally eliminates the kinds of inconsistencies that
840 can lead to crashes or undefined behavior. For functions returning smart
841 pointers, it is not necessary to specify a return value policy.
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100842
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200843.. _call_policies:
844
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100845Additional call policies
846========================
847
848In addition to the above return value policies, further `call policies` can be
849specified to indicate dependencies between parameters. There is currently just
850one policy named ``keep_alive<Nurse, Patient>``, which indicates that the
851argument with index ``Patient`` should be kept alive at least until the
Wenzel Jakob0b632312016-08-18 10:58:21 +0200852argument with index ``Nurse`` is freed by the garbage collector. Argument
853indices start at one, while zero refers to the return value. For methods, index
854``1`` refers to the implicit ``this`` pointer, while regular arguments begin at
855index ``2``. Arbitrarily many call policies can be specified. When a ``Nurse``
856with value ``None`` is detected at runtime, the call policy does nothing.
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100857
Wenzel Jakob0b632312016-08-18 10:58:21 +0200858This feature internally relies on the ability to create a *weak reference* to
859the nurse object, which is permitted by all classes exposed via pybind11. When
860the nurse object does not support weak references, an exception will be thrown.
861
862Consider the following example: here, the binding code for a list append
863operation ties the lifetime of the newly added element to the underlying
864container:
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100865
866.. code-block:: cpp
867
868 py::class_<List>(m, "List")
869 .def("append", &List::append, py::keep_alive<1, 2>());
870
871.. note::
872
873 ``keep_alive`` is analogous to the ``with_custodian_and_ward`` (if Nurse,
874 Patient != 0) and ``with_custodian_and_ward_postcall`` (if Nurse/Patient ==
875 0) policies from Boost.Python.
876
Wenzel Jakob61587162016-01-18 22:38:52 +0100877.. seealso::
878
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200879 The file :file:`tests/test_keep_alive.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400880 that demonstrates using :class:`keep_alive` in more detail.
Wenzel Jakob61587162016-01-18 22:38:52 +0100881
Wenzel Jakob93296692015-10-13 23:21:54 +0200882Implicit type conversions
883=========================
884
885Suppose that instances of two types ``A`` and ``B`` are used in a project, and
Wenzel Jakob8e93df82016-05-01 02:36:58 +0200886that an ``A`` can easily be converted into an instance of type ``B`` (examples of this
Wenzel Jakob93296692015-10-13 23:21:54 +0200887could be a fixed and an arbitrary precision number type).
888
889.. code-block:: cpp
890
891 py::class_<A>(m, "A")
892 /// ... members ...
893
894 py::class_<B>(m, "B")
895 .def(py::init<A>())
896 /// ... members ...
897
898 m.def("func",
899 [](const B &) { /* .... */ }
900 );
901
902To invoke the function ``func`` using a variable ``a`` containing an ``A``
903instance, we'd have to write ``func(B(a))`` in Python. On the other hand, C++
904will automatically apply an implicit type conversion, which makes it possible
905to directly write ``func(a)``.
906
907In this situation (i.e. where ``B`` has a constructor that converts from
908``A``), the following statement enables similar implicit conversions on the
909Python side:
910
911.. code-block:: cpp
912
913 py::implicitly_convertible<A, B>();
914
Wenzel Jakob3eeea6f2016-06-30 18:10:28 +0200915.. note::
916
917 Implicit conversions from ``A`` to ``B`` only work when ``B`` is a custom
918 data type that is exposed to Python via pybind11.
919
Wenzel Jakobf88af0c2016-06-22 13:52:31 +0200920.. _static_properties:
921
922Static properties
923=================
924
925The section on :ref:`properties` discussed the creation of instance properties
926that are implemented in terms of C++ getters and setters.
927
928Static properties can also be created in a similar way to expose getters and
929setters of static class attributes. It is important to note that the implicit
930``self`` argument also exists in this case and is used to pass the Python
931``type`` subclass instance. This parameter will often not be needed by the C++
932side, and the following example illustrates how to instantiate a lambda getter
933function that ignores it:
934
935.. code-block:: cpp
936
937 py::class_<Foo>(m, "Foo")
938 .def_property_readonly_static("foo", [](py::object /* self */) { return Foo(); });
939
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200940Unique pointers
941===============
942
943Given a class ``Example`` with Python bindings, it's possible to return
944instances wrapped in C++11 unique pointers, like so
945
946.. code-block:: cpp
947
948 std::unique_ptr<Example> create_example() { return std::unique_ptr<Example>(new Example()); }
949
950.. code-block:: cpp
951
952 m.def("create_example", &create_example);
953
954In other words, there is nothing special that needs to be done. While returning
955unique pointers in this way is allowed, it is *illegal* to use them as function
956arguments. For instance, the following function signature cannot be processed
957by pybind11.
958
959.. code-block:: cpp
960
961 void do_something_with_example(std::unique_ptr<Example> ex) { ... }
962
963The above signature would imply that Python needs to give up ownership of an
964object that is passed to this function, which is generally not possible (for
965instance, the object might be referenced elsewhere).
966
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200967.. _smart_pointers:
968
Wenzel Jakob93296692015-10-13 23:21:54 +0200969Smart pointers
970==============
971
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200972This section explains how to pass values that are wrapped in "smart" pointer
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200973types with internal reference counting. For the simpler C++11 unique pointers,
974refer to the previous section.
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200975
Jason Rhinelander5fffe202016-09-06 12:17:06 -0400976The binding generator for classes, :class:`class_`, can be passed a template
977type that denotes a special *holder* type that is used to manage references to
978the object. If no such holder type template argument is given, the default for
979a type named ``Type`` is ``std::unique_ptr<Type>``, which means that the object
980is deallocated when Python's reference count goes to zero.
Wenzel Jakob93296692015-10-13 23:21:54 +0200981
Wenzel Jakob1853b652015-10-18 15:38:50 +0200982It is possible to switch to other types of reference counting wrappers or smart
983pointers, which is useful in codebases that rely on them. For instance, the
984following snippet causes ``std::shared_ptr`` to be used instead.
Wenzel Jakob93296692015-10-13 23:21:54 +0200985
986.. code-block:: cpp
987
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100988 py::class_<Example, std::shared_ptr<Example> /* <- holder type */> obj(m, "Example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100989
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100990Note that any particular class can only be associated with a single holder type.
Wenzel Jakob93296692015-10-13 23:21:54 +0200991
Wenzel Jakob1853b652015-10-18 15:38:50 +0200992To enable transparent conversions for functions that take shared pointers as an
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100993argument or that return them, a macro invocation similar to the following must
Wenzel Jakob1853b652015-10-18 15:38:50 +0200994be declared at the top level before any binding code:
995
996.. code-block:: cpp
997
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200998 PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr<T>);
Wenzel Jakob1853b652015-10-18 15:38:50 +0200999
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001000.. note::
Wenzel Jakob61d67f02015-12-14 12:53:06 +01001001
1002 The first argument of :func:`PYBIND11_DECLARE_HOLDER_TYPE` should be a
1003 placeholder name that is used as a template parameter of the second
1004 argument. Thus, feel free to use any identifier, but use it consistently on
1005 both sides; also, don't use the name of a type that already exists in your
1006 codebase.
1007
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001008One potential stumbling block when using holder types is that they need to be
1009applied consistently. Can you guess what's broken about the following binding
1010code?
Wenzel Jakob6e213c92015-11-24 23:05:58 +01001011
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001012.. code-block:: cpp
Wenzel Jakob6e213c92015-11-24 23:05:58 +01001013
Jason Rhinelander5fffe202016-09-06 12:17:06 -04001014 PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr<T>);
1015
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001016 class Child { };
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001017
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001018 class Parent {
1019 public:
1020 Parent() : child(std::make_shared<Child>()) { }
1021 Child *get_child() { return child.get(); } /* Hint: ** DON'T DO THIS ** */
1022 private:
1023 std::shared_ptr<Child> child;
1024 };
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001025
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001026 PYBIND11_PLUGIN(example) {
1027 py::module m("example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001028
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001029 py::class_<Child, std::shared_ptr<Child>>(m, "Child");
1030
1031 py::class_<Parent, std::shared_ptr<Parent>>(m, "Parent")
1032 .def(py::init<>())
1033 .def("get_child", &Parent::get_child);
1034
1035 return m.ptr();
1036 }
1037
1038The following Python code will cause undefined behavior (and likely a
1039segmentation fault).
1040
1041.. code-block:: python
1042
1043 from example import Parent
1044 print(Parent().get_child())
1045
1046The problem is that ``Parent::get_child()`` returns a pointer to an instance of
1047``Child``, but the fact that this instance is already managed by
1048``std::shared_ptr<...>`` is lost when passing raw pointers. In this case,
1049pybind11 will create a second independent ``std::shared_ptr<...>`` that also
1050claims ownership of the pointer. In the end, the object will be freed **twice**
1051since these shared pointers have no way of knowing about each other.
1052
1053There are two ways to resolve this issue:
1054
10551. For types that are managed by a smart pointer class, never use raw pointers
1056 in function arguments or return values. In other words: always consistently
1057 wrap pointers into their designated holder types (such as
1058 ``std::shared_ptr<...>``). In this case, the signature of ``get_child()``
1059 should be modified as follows:
1060
1061.. code-block:: cpp
1062
1063 std::shared_ptr<Child> get_child() { return child; }
1064
10652. Adjust the definition of ``Child`` by specifying
1066 ``std::enable_shared_from_this<T>`` (see cppreference_ for details) as a
1067 base class. This adds a small bit of information to ``Child`` that allows
1068 pybind11 to realize that there is already an existing
1069 ``std::shared_ptr<...>`` and communicate with it. In this case, the
1070 declaration of ``Child`` should look as follows:
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001071
Wenzel Jakob6e213c92015-11-24 23:05:58 +01001072.. _cppreference: http://en.cppreference.com/w/cpp/memory/enable_shared_from_this
1073
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001074.. code-block:: cpp
1075
1076 class Child : public std::enable_shared_from_this<Child> { };
1077
Wenzel Jakob9bb97c12016-06-03 11:19:41 +02001078
1079Please take a look at the :ref:`macro_notes` before using this feature.
1080
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001081.. seealso::
1082
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001083 The file :file:`tests/test_smart_ptr.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001084 that demonstrates how to work with custom reference-counting holder types
1085 in more detail.
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001086
Wenzel Jakob93296692015-10-13 23:21:54 +02001087.. _custom_constructors:
1088
1089Custom constructors
1090===================
1091
1092The syntax for binding constructors was previously introduced, but it only
1093works when a constructor with the given parameters actually exists on the C++
1094side. To extend this to more general cases, let's take a look at what actually
1095happens under the hood: the following statement
1096
1097.. code-block:: cpp
1098
1099 py::class_<Example>(m, "Example")
1100 .def(py::init<int>());
1101
1102is short hand notation for
1103
1104.. code-block:: cpp
1105
1106 py::class_<Example>(m, "Example")
1107 .def("__init__",
1108 [](Example &instance, int arg) {
1109 new (&instance) Example(arg);
1110 }
1111 );
1112
1113In other words, :func:`init` creates an anonymous function that invokes an
1114in-place constructor. Memory allocation etc. is already take care of beforehand
1115within pybind11.
1116
Nickolai Belakovski63338252016-08-27 11:57:55 -07001117.. _classes_with_non_public_destructors:
1118
1119Classes with non-public destructors
1120===================================
1121
Wenzel Jakob5e4e4772016-08-28 02:03:15 +02001122If a class has a private or protected destructor (as might e.g. be the case in
1123a singleton pattern), a compile error will occur when creating bindings via
1124pybind11. The underlying issue is that the ``std::unique_ptr`` holder type that
1125is responsible for managing the lifetime of instances will reference the
1126destructor even if no deallocations ever take place. In order to expose classes
1127with private or protected destructors, it is possible to override the holder
Jason Rhinelander5fffe202016-09-06 12:17:06 -04001128type via a holder type argument to ``class_``. Pybind11 provides a helper class
Wenzel Jakob5e4e4772016-08-28 02:03:15 +02001129``py::nodelete`` that disables any destructor invocations. In this case, it is
1130crucial that instances are deallocated on the C++ side to avoid memory leaks.
Nickolai Belakovski63338252016-08-27 11:57:55 -07001131
1132.. code-block:: cpp
1133
1134 /* ... definition ... */
1135
1136 class MyClass {
Wenzel Jakob5e4e4772016-08-28 02:03:15 +02001137 private:
1138 ~MyClass() { }
Nickolai Belakovski63338252016-08-27 11:57:55 -07001139 };
1140
1141 /* ... binding code ... */
1142
Wenzel Jakob5e4e4772016-08-28 02:03:15 +02001143 py::class_<MyClass, std::unique_ptr<MyClass, py::nodelete>>(m, "MyClass")
Nickolai Belakovski63338252016-08-27 11:57:55 -07001144 .def(py::init<>)
1145
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001146.. _catching_and_throwing_exceptions:
1147
Wenzel Jakob93296692015-10-13 23:21:54 +02001148Catching and throwing exceptions
1149================================
1150
1151When C++ code invoked from Python throws an ``std::exception``, it is
1152automatically converted into a Python ``Exception``. pybind11 defines multiple
1153special exception classes that will map to different types of Python
1154exceptions:
1155
Wenzel Jakobf64feaf2016-04-28 14:33:45 +02001156.. tabularcolumns:: |p{0.5\textwidth}|p{0.45\textwidth}|
1157
Wenzel Jakob978e3762016-04-07 18:00:41 +02001158+--------------------------------------+------------------------------+
1159| C++ exception type | Python exception type |
1160+======================================+==============================+
1161| :class:`std::exception` | ``RuntimeError`` |
1162+--------------------------------------+------------------------------+
1163| :class:`std::bad_alloc` | ``MemoryError`` |
1164+--------------------------------------+------------------------------+
1165| :class:`std::domain_error` | ``ValueError`` |
1166+--------------------------------------+------------------------------+
1167| :class:`std::invalid_argument` | ``ValueError`` |
1168+--------------------------------------+------------------------------+
1169| :class:`std::length_error` | ``ValueError`` |
1170+--------------------------------------+------------------------------+
1171| :class:`std::out_of_range` | ``ValueError`` |
1172+--------------------------------------+------------------------------+
1173| :class:`std::range_error` | ``ValueError`` |
1174+--------------------------------------+------------------------------+
1175| :class:`pybind11::stop_iteration` | ``StopIteration`` (used to |
1176| | implement custom iterators) |
1177+--------------------------------------+------------------------------+
1178| :class:`pybind11::index_error` | ``IndexError`` (used to |
1179| | indicate out of bounds |
1180| | accesses in ``__getitem__``, |
1181| | ``__setitem__``, etc.) |
1182+--------------------------------------+------------------------------+
Sergey Lyskova95bde12016-05-08 19:31:55 -04001183| :class:`pybind11::value_error` | ``ValueError`` (used to |
1184| | indicate wrong value passed |
1185| | in ``container.remove(...)`` |
1186+--------------------------------------+------------------------------+
Jason Rhinelander5aa85be2016-08-11 21:22:05 -04001187| :class:`pybind11::key_error` | ``KeyError`` (used to |
1188| | indicate out of bounds |
1189| | accesses in ``__getitem__``, |
1190| | ``__setitem__`` in dict-like |
1191| | objects, etc.) |
1192+--------------------------------------+------------------------------+
Wenzel Jakob978e3762016-04-07 18:00:41 +02001193| :class:`pybind11::error_already_set` | Indicates that the Python |
1194| | exception flag has already |
1195| | been initialized |
1196+--------------------------------------+------------------------------+
Wenzel Jakob93296692015-10-13 23:21:54 +02001197
1198When a Python function invoked from C++ throws an exception, it is converted
1199into a C++ exception of type :class:`error_already_set` whose string payload
1200contains a textual summary.
1201
1202There is also a special exception :class:`cast_error` that is thrown by
1203:func:`handle::call` when the input arguments cannot be converted to Python
1204objects.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001205
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001206Registering custom exception translators
1207========================================
1208
1209If the default exception conversion policy described
1210:ref:`above <catching_and_throwing_exceptions>`
1211is insufficient, pybind11 also provides support for registering custom
1212exception translators.
1213
1214The function ``register_exception_translator(translator)`` takes a stateless
1215callable (e.g. a function pointer or a lambda function without captured
1216variables) with the following call signature: ``void(std::exception_ptr)``.
1217
1218When a C++ exception is thrown, registered exception translators are tried
1219in reverse order of registration (i.e. the last registered translator gets
1220a first shot at handling the exception).
1221
1222Inside the translator, ``std::rethrow_exception`` should be used within
1223a try block to re-throw the exception. A catch clause can then use
1224``PyErr_SetString`` to set a Python exception as demonstrated
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001225in :file:`tests/test_exceptions.cpp`.
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001226
1227This example also demonstrates how to create custom exception types
1228with ``py::exception``.
1229
1230The following example demonstrates this for a hypothetical exception class
1231``MyCustomException``:
1232
1233.. code-block:: cpp
1234
1235 py::register_exception_translator([](std::exception_ptr p) {
1236 try {
1237 if (p) std::rethrow_exception(p);
1238 } catch (const MyCustomException &e) {
1239 PyErr_SetString(PyExc_RuntimeError, e.what());
1240 }
1241 });
1242
1243Multiple exceptions can be handled by a single translator. If the exception is
1244not caught by the current translator, the previously registered one gets a
1245chance.
1246
1247If none of the registered exception translators is able to handle the
1248exception, it is handled by the default converter as described in the previous
1249section.
1250
1251.. note::
1252
1253 You must either call ``PyErr_SetString`` for every exception caught in a
1254 custom exception translator. Failure to do so will cause Python to crash
1255 with ``SystemError: error return without exception set``.
1256
1257 Exceptions that you do not plan to handle should simply not be caught.
1258
1259 You may also choose to explicity (re-)throw the exception to delegate it to
1260 the other existing exception translators.
1261
1262 The ``py::exception`` wrapper for creating custom exceptions cannot (yet)
Jason Rhinelander6b52c832016-09-06 12:27:00 -04001263 be used as a base type.
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001264
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001265.. _eigen:
1266
1267Transparent conversion of dense and sparse Eigen data types
1268===========================================================
1269
1270Eigen [#f1]_ is C++ header-based library for dense and sparse linear algebra. Due to
1271its popularity and widespread adoption, pybind11 provides transparent
1272conversion support between Eigen and Scientific Python linear algebra data types.
1273
1274Specifically, when including the optional header file :file:`pybind11/eigen.h`,
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001275pybind11 will automatically and transparently convert
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001276
12771. Static and dynamic Eigen dense vectors and matrices to instances of
1278 ``numpy.ndarray`` (and vice versa).
1279
Jason Rhinelanderb68d8fc2016-08-04 16:39:30 -040012802. Returned matrix expressions such as blocks (including columns or rows) and
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001281 diagonals will be converted to ``numpy.ndarray`` of the expression
1282 values.
1283
Jason Rhinelanderb68d8fc2016-08-04 16:39:30 -040012843. Returned matrix-like objects such as Eigen::DiagonalMatrix or
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001285 Eigen::SelfAdjointView will be converted to ``numpy.ndarray`` containing the
1286 expressed value.
1287
Jason Rhinelanderb68d8fc2016-08-04 16:39:30 -040012884. Eigen sparse vectors and matrices to instances of
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001289 ``scipy.sparse.csr_matrix``/``scipy.sparse.csc_matrix`` (and vice versa).
1290
1291This makes it possible to bind most kinds of functions that rely on these types.
1292One major caveat are functions that take Eigen matrices *by reference* and modify
1293them somehow, in which case the information won't be propagated to the caller.
1294
1295.. code-block:: cpp
1296
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001297 /* The Python bindings of these functions won't replicate
1298 the intended effect of modifying the function arguments */
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001299 void scale_by_2(Eigen::Vector3f &v) {
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001300 v *= 2;
1301 }
1302 void scale_by_2(Eigen::Ref<Eigen::MatrixXd> &v) {
1303 v *= 2;
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001304 }
1305
1306To see why this is, refer to the section on :ref:`opaque` (although that
1307section specifically covers STL data types, the underlying issue is the same).
1308The next two sections discuss an efficient alternative for exposing the
1309underlying native Eigen types as opaque objects in a way that still integrates
1310with NumPy and SciPy.
1311
1312.. [#f1] http://eigen.tuxfamily.org
1313
1314.. seealso::
1315
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001316 The file :file:`tests/test_eigen.cpp` contains a complete example that
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001317 shows how to pass Eigen sparse and dense data types in more detail.
1318
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001319Buffer protocol
1320===============
1321
1322Python supports an extremely general and convenient approach for exchanging
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001323data between plugin libraries. Types can expose a buffer view [#f2]_, which
1324provides fast direct access to the raw internal data representation. Suppose we
1325want to bind the following simplistic Matrix class:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001326
1327.. code-block:: cpp
1328
1329 class Matrix {
1330 public:
1331 Matrix(size_t rows, size_t cols) : m_rows(rows), m_cols(cols) {
1332 m_data = new float[rows*cols];
1333 }
1334 float *data() { return m_data; }
1335 size_t rows() const { return m_rows; }
1336 size_t cols() const { return m_cols; }
1337 private:
1338 size_t m_rows, m_cols;
1339 float *m_data;
1340 };
1341
1342The following binding code exposes the ``Matrix`` contents as a buffer object,
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001343making it possible to cast Matrices into NumPy arrays. It is even possible to
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001344completely avoid copy operations with Python expressions like
1345``np.array(matrix_instance, copy = False)``.
1346
1347.. code-block:: cpp
1348
1349 py::class_<Matrix>(m, "Matrix")
1350 .def_buffer([](Matrix &m) -> py::buffer_info {
1351 return py::buffer_info(
Ivan Smirnov5e71e172016-06-26 12:42:34 +01001352 m.data(), /* Pointer to buffer */
1353 sizeof(float), /* Size of one scalar */
1354 py::format_descriptor<float>::format(), /* Python struct-style format descriptor */
1355 2, /* Number of dimensions */
1356 { m.rows(), m.cols() }, /* Buffer dimensions */
1357 { sizeof(float) * m.rows(), /* Strides (in bytes) for each index */
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001358 sizeof(float) }
1359 );
1360 });
1361
1362The snippet above binds a lambda function, which can create ``py::buffer_info``
1363description records on demand describing a given matrix. The contents of
1364``py::buffer_info`` mirror the Python buffer protocol specification.
1365
1366.. code-block:: cpp
1367
1368 struct buffer_info {
1369 void *ptr;
1370 size_t itemsize;
1371 std::string format;
1372 int ndim;
1373 std::vector<size_t> shape;
1374 std::vector<size_t> strides;
1375 };
1376
1377To create a C++ function that can take a Python buffer object as an argument,
1378simply use the type ``py::buffer`` as one of its arguments. Buffers can exist
1379in a great variety of configurations, hence some safety checks are usually
1380necessary in the function body. Below, you can see an basic example on how to
1381define a custom constructor for the Eigen double precision matrix
1382(``Eigen::MatrixXd``) type, which supports initialization from compatible
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001383buffer objects (e.g. a NumPy matrix).
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001384
1385.. code-block:: cpp
1386
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001387 /* Bind MatrixXd (or some other Eigen type) to Python */
1388 typedef Eigen::MatrixXd Matrix;
1389
1390 typedef Matrix::Scalar Scalar;
1391 constexpr bool rowMajor = Matrix::Flags & Eigen::RowMajorBit;
1392
1393 py::class_<Matrix>(m, "Matrix")
1394 .def("__init__", [](Matrix &m, py::buffer b) {
Wenzel Jakobe7628532016-05-05 10:04:44 +02001395 typedef Eigen::Stride<Eigen::Dynamic, Eigen::Dynamic> Strides;
Wenzel Jakobe7628532016-05-05 10:04:44 +02001396
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001397 /* Request a buffer descriptor from Python */
1398 py::buffer_info info = b.request();
1399
1400 /* Some sanity checks ... */
Ivan Smirnov5e71e172016-06-26 12:42:34 +01001401 if (info.format != py::format_descriptor<Scalar>::format())
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001402 throw std::runtime_error("Incompatible format: expected a double array!");
1403
1404 if (info.ndim != 2)
1405 throw std::runtime_error("Incompatible buffer dimension!");
1406
Wenzel Jakobe7628532016-05-05 10:04:44 +02001407 auto strides = Strides(
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001408 info.strides[rowMajor ? 0 : 1] / sizeof(Scalar),
1409 info.strides[rowMajor ? 1 : 0] / sizeof(Scalar));
Wenzel Jakobe7628532016-05-05 10:04:44 +02001410
1411 auto map = Eigen::Map<Matrix, 0, Strides>(
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001412 static_cat<Scalar *>(info.ptr), info.shape[0], info.shape[1], strides);
Wenzel Jakobe7628532016-05-05 10:04:44 +02001413
1414 new (&m) Matrix(map);
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001415 });
1416
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001417For reference, the ``def_buffer()`` call for this Eigen data type should look
1418as follows:
1419
1420.. code-block:: cpp
1421
1422 .def_buffer([](Matrix &m) -> py::buffer_info {
1423 return py::buffer_info(
1424 m.data(), /* Pointer to buffer */
1425 sizeof(Scalar), /* Size of one scalar */
1426 /* Python struct-style format descriptor */
Ivan Smirnov5e71e172016-06-26 12:42:34 +01001427 py::format_descriptor<Scalar>::format(),
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001428 /* Number of dimensions */
1429 2,
1430 /* Buffer dimensions */
1431 { (size_t) m.rows(),
1432 (size_t) m.cols() },
1433 /* Strides (in bytes) for each index */
1434 { sizeof(Scalar) * (rowMajor ? m.cols() : 1),
1435 sizeof(Scalar) * (rowMajor ? 1 : m.rows()) }
1436 );
1437 })
1438
1439For a much easier approach of binding Eigen types (although with some
1440limitations), refer to the section on :ref:`eigen`.
1441
Wenzel Jakob93296692015-10-13 23:21:54 +02001442.. seealso::
1443
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001444 The file :file:`tests/test_buffers.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001445 that demonstrates using the buffer protocol with pybind11 in more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +02001446
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001447.. [#f2] http://docs.python.org/3/c-api/buffer.html
Wenzel Jakob978e3762016-04-07 18:00:41 +02001448
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001449NumPy support
1450=============
1451
1452By exchanging ``py::buffer`` with ``py::array`` in the above snippet, we can
1453restrict the function so that it only accepts NumPy arrays (rather than any
Wenzel Jakob978e3762016-04-07 18:00:41 +02001454type of Python object satisfying the buffer protocol).
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001455
1456In many situations, we want to define a function which only accepts a NumPy
Wenzel Jakob93296692015-10-13 23:21:54 +02001457array of a certain data type. This is possible via the ``py::array_t<T>``
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001458template. For instance, the following function requires the argument to be a
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001459NumPy array containing double precision values.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001460
1461.. code-block:: cpp
1462
Wenzel Jakob93296692015-10-13 23:21:54 +02001463 void f(py::array_t<double> array);
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001464
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001465When it is invoked with a different type (e.g. an integer or a list of
1466integers), the binding code will attempt to cast the input into a NumPy array
1467of the requested type. Note that this feature requires the
1468:file:``pybind11/numpy.h`` header to be included.
1469
1470Data in NumPy arrays is not guaranteed to packed in a dense manner;
1471furthermore, entries can be separated by arbitrary column and row strides.
1472Sometimes, it can be useful to require a function to only accept dense arrays
1473using either the C (row-major) or Fortran (column-major) ordering. This can be
1474accomplished via a second template argument with values ``py::array::c_style``
1475or ``py::array::f_style``.
1476
1477.. code-block:: cpp
1478
Wenzel Jakobb47a9de2016-05-19 16:02:09 +02001479 void f(py::array_t<double, py::array::c_style | py::array::forcecast> array);
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001480
Wenzel Jakobb47a9de2016-05-19 16:02:09 +02001481The ``py::array::forcecast`` argument is the default value of the second
1482template paramenter, and it ensures that non-conforming arguments are converted
1483into an array satisfying the specified requirements instead of trying the next
1484function overload.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001485
Ivan Smirnov223afe32016-07-02 15:33:04 +01001486NumPy structured types
1487======================
1488
1489In order for ``py::array_t`` to work with structured (record) types, we first need
Ivan Smirnov5412a052016-07-02 16:18:42 +01001490to register the memory layout of the type. This can be done via ``PYBIND11_NUMPY_DTYPE``
Ivan Smirnov223afe32016-07-02 15:33:04 +01001491macro which expects the type followed by field names:
1492
1493.. code-block:: cpp
1494
1495 struct A {
1496 int x;
1497 double y;
1498 };
1499
1500 struct B {
1501 int z;
1502 A a;
1503 };
1504
Ivan Smirnov5412a052016-07-02 16:18:42 +01001505 PYBIND11_NUMPY_DTYPE(A, x, y);
1506 PYBIND11_NUMPY_DTYPE(B, z, a);
Ivan Smirnov223afe32016-07-02 15:33:04 +01001507
1508 /* now both A and B can be used as template arguments to py::array_t */
1509
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001510Vectorizing functions
1511=====================
1512
1513Suppose we want to bind a function with the following signature to Python so
1514that it can process arbitrary NumPy array arguments (vectors, matrices, general
1515N-D arrays) in addition to its normal arguments:
1516
1517.. code-block:: cpp
1518
1519 double my_func(int x, float y, double z);
1520
Wenzel Jakob8f4eb002015-10-15 18:13:33 +02001521After including the ``pybind11/numpy.h`` header, this is extremely simple:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001522
1523.. code-block:: cpp
1524
1525 m.def("vectorized_func", py::vectorize(my_func));
1526
1527Invoking the function like below causes 4 calls to be made to ``my_func`` with
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001528each of the array elements. The significant advantage of this compared to
Wenzel Jakob978e3762016-04-07 18:00:41 +02001529solutions like ``numpy.vectorize()`` is that the loop over the elements runs
1530entirely on the C++ side and can be crunched down into a tight, optimized loop
1531by the compiler. The result is returned as a NumPy array of type
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001532``numpy.dtype.float64``.
1533
Wenzel Jakob99279f72016-06-03 11:19:29 +02001534.. code-block:: pycon
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001535
1536 >>> x = np.array([[1, 3],[5, 7]])
1537 >>> y = np.array([[2, 4],[6, 8]])
1538 >>> z = 3
1539 >>> result = vectorized_func(x, y, z)
1540
1541The scalar argument ``z`` is transparently replicated 4 times. The input
1542arrays ``x`` and ``y`` are automatically converted into the right types (they
1543are of type ``numpy.dtype.int64`` but need to be ``numpy.dtype.int32`` and
1544``numpy.dtype.float32``, respectively)
1545
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001546Sometimes we might want to explicitly exclude an argument from the vectorization
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001547because it makes little sense to wrap it in a NumPy array. For instance,
1548suppose the function signature was
1549
1550.. code-block:: cpp
1551
1552 double my_func(int x, float y, my_custom_type *z);
1553
1554This can be done with a stateful Lambda closure:
1555
1556.. code-block:: cpp
1557
1558 // Vectorize a lambda function with a capture object (e.g. to exclude some arguments from the vectorization)
1559 m.def("vectorized_func",
Wenzel Jakob93296692015-10-13 23:21:54 +02001560 [](py::array_t<int> x, py::array_t<float> y, my_custom_type *z) {
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001561 auto stateful_closure = [z](int x, float y) { return my_func(x, y, z); };
1562 return py::vectorize(stateful_closure)(x, y);
1563 }
1564 );
1565
Wenzel Jakob61587162016-01-18 22:38:52 +01001566In cases where the computation is too complicated to be reduced to
1567``vectorize``, it will be necessary to create and access the buffer contents
1568manually. The following snippet contains a complete example that shows how this
1569works (the code is somewhat contrived, since it could have been done more
1570simply using ``vectorize``).
1571
1572.. code-block:: cpp
1573
1574 #include <pybind11/pybind11.h>
1575 #include <pybind11/numpy.h>
1576
1577 namespace py = pybind11;
1578
1579 py::array_t<double> add_arrays(py::array_t<double> input1, py::array_t<double> input2) {
1580 auto buf1 = input1.request(), buf2 = input2.request();
1581
1582 if (buf1.ndim != 1 || buf2.ndim != 1)
1583 throw std::runtime_error("Number of dimensions must be one");
1584
Ivan Smirnovb6518592016-08-13 13:28:56 +01001585 if (buf1.size != buf2.size)
Wenzel Jakob61587162016-01-18 22:38:52 +01001586 throw std::runtime_error("Input shapes must match");
1587
Ivan Smirnovb6518592016-08-13 13:28:56 +01001588 /* No pointer is passed, so NumPy will allocate the buffer */
1589 auto result = py::array_t<double>(buf1.size);
Wenzel Jakob61587162016-01-18 22:38:52 +01001590
1591 auto buf3 = result.request();
1592
1593 double *ptr1 = (double *) buf1.ptr,
1594 *ptr2 = (double *) buf2.ptr,
1595 *ptr3 = (double *) buf3.ptr;
1596
1597 for (size_t idx = 0; idx < buf1.shape[0]; idx++)
1598 ptr3[idx] = ptr1[idx] + ptr2[idx];
1599
1600 return result;
1601 }
1602
1603 PYBIND11_PLUGIN(test) {
1604 py::module m("test");
1605 m.def("add_arrays", &add_arrays, "Add two NumPy arrays");
1606 return m.ptr();
1607 }
1608
Wenzel Jakob93296692015-10-13 23:21:54 +02001609.. seealso::
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001610
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001611 The file :file:`tests/test_numpy_vectorize.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001612 example that demonstrates using :func:`vectorize` in more detail.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001613
Wenzel Jakob93296692015-10-13 23:21:54 +02001614Functions taking Python objects as arguments
1615============================================
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001616
Wenzel Jakob93296692015-10-13 23:21:54 +02001617pybind11 exposes all major Python types using thin C++ wrapper classes. These
1618wrapper classes can also be used as parameters of functions in bindings, which
1619makes it possible to directly work with native Python types on the C++ side.
1620For instance, the following statement iterates over a Python ``dict``:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001621
Wenzel Jakob93296692015-10-13 23:21:54 +02001622.. code-block:: cpp
1623
1624 void print_dict(py::dict dict) {
1625 /* Easily interact with Python types */
1626 for (auto item : dict)
1627 std::cout << "key=" << item.first << ", "
1628 << "value=" << item.second << std::endl;
1629 }
1630
1631Available types include :class:`handle`, :class:`object`, :class:`bool_`,
Wenzel Jakob27e8e102016-01-17 22:36:37 +01001632:class:`int_`, :class:`float_`, :class:`str`, :class:`bytes`, :class:`tuple`,
Wenzel Jakobf64feaf2016-04-28 14:33:45 +02001633:class:`list`, :class:`dict`, :class:`slice`, :class:`none`, :class:`capsule`,
1634:class:`iterable`, :class:`iterator`, :class:`function`, :class:`buffer`,
1635:class:`array`, and :class:`array_t`.
Wenzel Jakob93296692015-10-13 23:21:54 +02001636
Wenzel Jakob436b7312015-10-20 01:04:30 +02001637In this kind of mixed code, it is often necessary to convert arbitrary C++
1638types to Python, which can be done using :func:`cast`:
1639
1640.. code-block:: cpp
1641
1642 MyClass *cls = ..;
1643 py::object obj = py::cast(cls);
1644
1645The reverse direction uses the following syntax:
1646
1647.. code-block:: cpp
1648
1649 py::object obj = ...;
1650 MyClass *cls = obj.cast<MyClass *>();
1651
1652When conversion fails, both directions throw the exception :class:`cast_error`.
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001653It is also possible to call python functions via ``operator()``.
1654
1655.. code-block:: cpp
1656
1657 py::function f = <...>;
1658 py::object result_py = f(1234, "hello", some_instance);
1659 MyClass &result = result_py.cast<MyClass>();
1660
Dean Moldovan625bd482016-09-02 16:40:49 +02001661Keyword arguments are also supported. In Python, there is the usual call syntax:
1662
1663.. code-block:: python
1664
1665 def f(number, say, to):
1666 ... # function code
1667
1668 f(1234, say="hello", to=some_instance) # keyword call in Python
1669
1670In C++, the same call can be made using:
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001671
1672.. code-block:: cpp
1673
Dean Moldovan625bd482016-09-02 16:40:49 +02001674 using pybind11::literals; // to bring in the `_a` literal
1675 f(1234, "say"_a="hello", "to"_a=some_instance); // keyword call in C++
1676
1677Unpacking of ``*args`` and ``**kwargs`` is also possible and can be mixed with
1678other arguments:
1679
1680.. code-block:: cpp
1681
1682 // * unpacking
1683 py::tuple args = py::make_tuple(1234, "hello", some_instance);
1684 f(*args);
1685
1686 // ** unpacking
1687 py::dict kwargs = py::dict("number"_a=1234, "say"_a="hello", "to"_a=some_instance);
1688 f(**kwargs);
1689
1690 // mixed keywords, * and ** unpacking
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001691 py::tuple args = py::make_tuple(1234);
Dean Moldovan625bd482016-09-02 16:40:49 +02001692 py::dict kwargs = py::dict("to"_a=some_instance);
1693 f(*args, "say"_a="hello", **kwargs);
1694
1695Generalized unpacking according to PEP448_ is also supported:
1696
1697.. code-block:: cpp
1698
1699 py::dict kwargs1 = py::dict("number"_a=1234);
1700 py::dict kwargs2 = py::dict("to"_a=some_instance);
1701 f(**kwargs1, "say"_a="hello", **kwargs2);
Wenzel Jakob436b7312015-10-20 01:04:30 +02001702
Wenzel Jakob93296692015-10-13 23:21:54 +02001703.. seealso::
1704
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001705 The file :file:`tests/test_python_types.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001706 example that demonstrates passing native Python types in more detail. The
Dean Moldovan625bd482016-09-02 16:40:49 +02001707 file :file:`tests/test_callbacks.cpp` presents a few examples of calling
1708 Python functions from C++, including keywords arguments and unpacking.
1709
1710.. _PEP448: https://www.python.org/dev/peps/pep-0448/
1711
1712Using Python's print function in C++
1713====================================
1714
1715The usual way to write output in C++ is using ``std::cout`` while in Python one
1716would use ``print``. Since these methods use different buffers, mixing them can
1717lead to output order issues. To resolve this, pybind11 modules can use the
1718:func:`py::print` function which writes to Python's ``sys.stdout`` for consistency.
1719
1720Python's ``print`` function is replicated in the C++ API including optional
1721keyword arguments ``sep``, ``end``, ``file``, ``flush``. Everything works as
1722expected in Python:
1723
1724.. code-block:: cpp
1725
1726 py::print(1, 2.0, "three"); // 1 2.0 three
1727 py::print(1, 2.0, "three", "sep"_a="-"); // 1-2.0-three
1728
1729 auto args = py::make_tuple("unpacked", true);
1730 py::print("->", *args, "end"_a="<-"); // -> unpacked True <-
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001731
1732Default arguments revisited
1733===========================
1734
1735The section on :ref:`default_args` previously discussed basic usage of default
1736arguments using pybind11. One noteworthy aspect of their implementation is that
1737default arguments are converted to Python objects right at declaration time.
1738Consider the following example:
1739
1740.. code-block:: cpp
1741
1742 py::class_<MyClass>("MyClass")
1743 .def("myFunction", py::arg("arg") = SomeType(123));
1744
1745In this case, pybind11 must already be set up to deal with values of the type
1746``SomeType`` (via a prior instantiation of ``py::class_<SomeType>``), or an
1747exception will be thrown.
1748
1749Another aspect worth highlighting is that the "preview" of the default argument
1750in the function signature is generated using the object's ``__repr__`` method.
1751If not available, the signature may not be very helpful, e.g.:
1752
Wenzel Jakob99279f72016-06-03 11:19:29 +02001753.. code-block:: pycon
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001754
1755 FUNCTIONS
1756 ...
1757 | myFunction(...)
Wenzel Jakob48548ea2016-01-17 22:36:44 +01001758 | Signature : (MyClass, arg : SomeType = <SomeType object at 0x101b7b080>) -> NoneType
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001759 ...
1760
1761The first way of addressing this is by defining ``SomeType.__repr__``.
1762Alternatively, it is possible to specify the human-readable preview of the
1763default argument manually using the ``arg_t`` notation:
1764
1765.. code-block:: cpp
1766
1767 py::class_<MyClass>("MyClass")
1768 .def("myFunction", py::arg_t<SomeType>("arg", SomeType(123), "SomeType(123)"));
1769
Wenzel Jakobc769fce2016-03-03 12:03:30 +01001770Sometimes it may be necessary to pass a null pointer value as a default
1771argument. In this case, remember to cast it to the underlying type in question,
1772like so:
1773
1774.. code-block:: cpp
1775
1776 py::class_<MyClass>("MyClass")
1777 .def("myFunction", py::arg("arg") = (SomeType *) nullptr);
1778
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001779Binding functions that accept arbitrary numbers of arguments and keywords arguments
1780===================================================================================
1781
1782Python provides a useful mechanism to define functions that accept arbitrary
1783numbers of arguments and keyword arguments:
1784
1785.. code-block:: cpp
1786
1787 def generic(*args, **kwargs):
1788 # .. do something with args and kwargs
1789
1790Such functions can also be created using pybind11:
1791
1792.. code-block:: cpp
1793
1794 void generic(py::args args, py::kwargs kwargs) {
1795 /// .. do something with args
1796 if (kwargs)
1797 /// .. do something with kwargs
1798 }
1799
1800 /// Binding code
1801 m.def("generic", &generic);
1802
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001803(See ``tests/test_kwargs_and_defaults.cpp``). The class ``py::args``
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001804derives from ``py::list`` and ``py::kwargs`` derives from ``py::dict`` Note
1805that the ``kwargs`` argument is invalid if no keyword arguments were actually
1806provided. Please refer to the other examples for details on how to iterate
1807over these, and on how to cast their entries into C++ objects.
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001808
Wenzel Jakob3764e282016-08-01 23:34:48 +02001809.. warning::
1810
1811 Unlike Python, pybind11 does not allow combining normal parameters with the
1812 ``args`` / ``kwargs`` special parameters.
1813
Wenzel Jakob2dfbade2016-01-17 22:36:37 +01001814Partitioning code over multiple extension modules
1815=================================================
1816
Wenzel Jakob90d2f5e2016-04-11 14:30:11 +02001817It's straightforward to split binding code over multiple extension modules,
1818while referencing types that are declared elsewhere. Everything "just" works
1819without any special precautions. One exception to this rule occurs when
1820extending a type declared in another extension module. Recall the basic example
1821from Section :ref:`inheritance`.
Wenzel Jakob2dfbade2016-01-17 22:36:37 +01001822
1823.. code-block:: cpp
1824
1825 py::class_<Pet> pet(m, "Pet");
1826 pet.def(py::init<const std::string &>())
1827 .def_readwrite("name", &Pet::name);
1828
1829 py::class_<Dog>(m, "Dog", pet /* <- specify parent */)
1830 .def(py::init<const std::string &>())
1831 .def("bark", &Dog::bark);
1832
1833Suppose now that ``Pet`` bindings are defined in a module named ``basic``,
1834whereas the ``Dog`` bindings are defined somewhere else. The challenge is of
1835course that the variable ``pet`` is not available anymore though it is needed
1836to indicate the inheritance relationship to the constructor of ``class_<Dog>``.
1837However, it can be acquired as follows:
1838
1839.. code-block:: cpp
1840
1841 py::object pet = (py::object) py::module::import("basic").attr("Pet");
1842
1843 py::class_<Dog>(m, "Dog", pet)
1844 .def(py::init<const std::string &>())
1845 .def("bark", &Dog::bark);
1846
Jason Rhinelander6b52c832016-09-06 12:27:00 -04001847Alternatively, you can specify the base class as a template parameter option to
1848``class_``, which performs an automated lookup of the corresponding Python
1849type. Like the above code, however, this also requires invoking the ``import``
1850function once to ensure that the pybind11 binding code of the module ``basic``
1851has been executed:
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001852
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001853.. code-block:: cpp
1854
1855 py::module::import("basic");
1856
Jason Rhinelander6b52c832016-09-06 12:27:00 -04001857 py::class_<Dog, Pet>(m, "Dog")
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001858 .def(py::init<const std::string &>())
1859 .def("bark", &Dog::bark);
Wenzel Jakobeda978e2016-03-15 15:05:40 +01001860
Wenzel Jakob978e3762016-04-07 18:00:41 +02001861Naturally, both methods will fail when there are cyclic dependencies.
1862
Wenzel Jakob90d2f5e2016-04-11 14:30:11 +02001863Note that compiling code which has its default symbol visibility set to
1864*hidden* (e.g. via the command line flag ``-fvisibility=hidden`` on GCC/Clang) can interfere with the
1865ability to access types defined in another extension module. Workarounds
1866include changing the global symbol visibility (not recommended, because it will
1867lead unnecessarily large binaries) or manually exporting types that are
1868accessed by multiple extension modules:
1869
1870.. code-block:: cpp
1871
1872 #ifdef _WIN32
1873 # define EXPORT_TYPE __declspec(dllexport)
1874 #else
1875 # define EXPORT_TYPE __attribute__ ((visibility("default")))
1876 #endif
1877
1878 class EXPORT_TYPE Dog : public Animal {
1879 ...
1880 };
1881
1882
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001883Pickling support
1884================
1885
1886Python's ``pickle`` module provides a powerful facility to serialize and
1887de-serialize a Python object graph into a binary data stream. To pickle and
Wenzel Jakob3d0e6ff2016-04-13 11:48:10 +02001888unpickle C++ classes using pybind11, two additional functions must be provided.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001889Suppose the class in question has the following signature:
1890
1891.. code-block:: cpp
1892
1893 class Pickleable {
1894 public:
1895 Pickleable(const std::string &value) : m_value(value) { }
1896 const std::string &value() const { return m_value; }
1897
1898 void setExtra(int extra) { m_extra = extra; }
1899 int extra() const { return m_extra; }
1900 private:
1901 std::string m_value;
1902 int m_extra = 0;
1903 };
1904
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001905The binding code including the requisite ``__setstate__`` and ``__getstate__`` methods [#f3]_
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001906looks as follows:
1907
1908.. code-block:: cpp
1909
1910 py::class_<Pickleable>(m, "Pickleable")
1911 .def(py::init<std::string>())
1912 .def("value", &Pickleable::value)
1913 .def("extra", &Pickleable::extra)
1914 .def("setExtra", &Pickleable::setExtra)
1915 .def("__getstate__", [](const Pickleable &p) {
1916 /* Return a tuple that fully encodes the state of the object */
1917 return py::make_tuple(p.value(), p.extra());
1918 })
1919 .def("__setstate__", [](Pickleable &p, py::tuple t) {
1920 if (t.size() != 2)
1921 throw std::runtime_error("Invalid state!");
1922
Wenzel Jakobd40885a2016-04-13 13:30:05 +02001923 /* Invoke the in-place constructor. Note that this is needed even
1924 when the object just has a trivial default constructor */
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001925 new (&p) Pickleable(t[0].cast<std::string>());
1926
1927 /* Assign any additional state */
1928 p.setExtra(t[1].cast<int>());
1929 });
1930
1931An instance can now be pickled as follows:
1932
1933.. code-block:: python
1934
1935 try:
1936 import cPickle as pickle # Use cPickle on Python 2.7
1937 except ImportError:
1938 import pickle
1939
1940 p = Pickleable("test_value")
1941 p.setExtra(15)
Wenzel Jakob81e09752016-04-30 23:13:03 +02001942 data = pickle.dumps(p, 2)
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001943
Wenzel Jakob81e09752016-04-30 23:13:03 +02001944Note that only the cPickle module is supported on Python 2.7. The second
1945argument to ``dumps`` is also crucial: it selects the pickle protocol version
19462, since the older version 1 is not supported. Newer versions are also fine—for
1947instance, specify ``-1`` to always use the latest available version. Beware:
1948failure to follow these instructions will cause important pybind11 memory
1949allocation routines to be skipped during unpickling, which will likely lead to
1950memory corruption and/or segmentation faults.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001951
1952.. seealso::
1953
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001954 The file :file:`tests/test_pickling.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001955 that demonstrates how to pickle and unpickle types using pybind11 in more
1956 detail.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001957
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001958.. [#f3] http://docs.python.org/3/library/pickle.html#pickling-class-instances
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001959
1960Generating documentation using Sphinx
1961=====================================
1962
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001963Sphinx [#f4]_ has the ability to inspect the signatures and documentation
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001964strings in pybind11-based extension modules to automatically generate beautiful
Wenzel Jakobca8dc082016-06-03 14:24:17 +02001965documentation in a variety formats. The python_example repository [#f5]_ contains a
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001966simple example repository which uses this approach.
1967
1968There are two potential gotchas when using this approach: first, make sure that
1969the resulting strings do not contain any :kbd:`TAB` characters, which break the
1970docstring parsing routines. You may want to use C++11 raw string literals,
1971which are convenient for multi-line comments. Conveniently, any excess
1972indentation will be automatically be removed by Sphinx. However, for this to
1973work, it is important that all lines are indented consistently, i.e.:
1974
1975.. code-block:: cpp
1976
1977 // ok
1978 m.def("foo", &foo, R"mydelimiter(
1979 The foo function
1980
1981 Parameters
1982 ----------
1983 )mydelimiter");
1984
1985 // *not ok*
1986 m.def("foo", &foo, R"mydelimiter(The foo function
1987
1988 Parameters
1989 ----------
1990 )mydelimiter");
1991
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001992.. [#f4] http://www.sphinx-doc.org
Wenzel Jakobca8dc082016-06-03 14:24:17 +02001993.. [#f5] http://github.com/pybind/python_example
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001994
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001995Evaluating Python expressions from strings and files
1996====================================================
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001997
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001998pybind11 provides the :func:`eval` and :func:`eval_file` functions to evaluate
1999Python expressions and statements. The following example illustrates how they
2000can be used.
2001
2002Both functions accept a template parameter that describes how the argument
2003should be interpreted. Possible choices include ``eval_expr`` (isolated
2004expression), ``eval_single_statement`` (a single statement, return value is
2005always ``none``), and ``eval_statements`` (sequence of statements, return value
2006is always ``none``).
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02002007
2008.. code-block:: cpp
2009
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02002010 // At beginning of file
2011 #include <pybind11/eval.h>
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02002012
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02002013 ...
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02002014
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02002015 // Evaluate in scope of main module
2016 py::object scope = py::module::import("__main__").attr("__dict__");
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02002017
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02002018 // Evaluate an isolated expression
2019 int result = py::eval("my_variable + 10", scope).cast<int>();
2020
2021 // Evaluate a sequence of statements
2022 py::eval<py::eval_statements>(
2023 "print('Hello')\n"
2024 "print('world!');",
2025 scope);
2026
2027 // Evaluate the statements in an separate Python file on disk
2028 py::eval_file("script.py", scope);
Wenzel Jakob48ce0722016-09-06 14:13:22 +09002029
2030Development of custom type casters
2031==================================
2032
2033In very rare cases, applications may require custom type casters that cannot be
2034expressed using the abstractions provided by pybind11, thus requiring raw
2035Python C API calls. This is fairly advanced usage and should only be pursued by
2036experts who are familiar with the intricacies of Python reference counting.
2037
2038The following snippets demonstrate how this works for a very simple ``inty``
2039type that that should be convertible from Python types that provide a
2040``__int__(self)`` method.
2041
2042.. code-block:: cpp
2043
2044 struct inty { long long_value; };
2045
2046 void print(inty s) {
2047 std::cout << s.long_value << std::endl;
2048 }
2049
2050The following Python snippet demonstrates the intended usage from the Python side:
2051
2052.. code-block:: python
2053
2054 class A:
2055 def __int__(self):
2056 return 123
2057
2058 from example import print
2059 print(A())
2060
2061To register the necessary conversion routines, it is necessary to add
2062a partial overload to the ``pybind11::detail::type_caster<T>`` template.
2063Although this is an implementation detail, adding partial overloads to this
2064type is explicitly allowed.
2065
2066.. code-block:: cpp
2067
2068 namespace pybind11 {
2069 namespace detail {
2070 template <> struct type_caster<inty> {
2071 public:
2072 /**
2073 * This macro establishes the name 'inty' in
2074 * function signatures and declares a local variable
2075 * 'value' of type inty
2076 */
2077 PYBIND11_TYPE_CASTER(inty, _("inty"));
2078
2079 /**
2080 * Conversion part 1 (Python->C++): convert a PyObject into a inty
2081 * instance or return false upon failure. The second argument
2082 * indicates whether implicit conversions should be applied.
2083 */
2084 bool load(handle src, bool) {
2085 /* Extract PyObject from handle */
2086 PyObject *source = src.ptr();
2087 /* Try converting into a Python integer value */
2088 PyObject *tmp = PyNumber_Long(source);
2089 if (!tmp)
2090 return false;
2091 /* Now try to convert into a C++ int */
2092 value.long_value = PyLong_AsLong(tmp);
2093 Py_DECREF(tmp);
2094 /* Ensure return code was OK (to avoid out-of-range errors etc) */
2095 return !(value.long_value == -1 && !PyErr_Occurred());
2096 }
2097
2098 /**
2099 * Conversion part 2 (C++ -> Python): convert an inty instance into
2100 * a Python object. The second and third arguments are used to
2101 * indicate the return value policy and parent object (for
2102 * ``return_value_policy::reference_internal``) and are generally
2103 * ignored by implicit casters.
2104 */
2105 static handle cast(inty src, return_value_policy /* policy */, handle /* parent */) {
2106 return PyLong_FromLong(src.long_value);
2107 }
2108 };
2109 }
2110 };