blob: 400a9265dcaac1f987e6ebb993b0833472a2bf8b [file] [log] [blame]
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001.. _advanced:
2
3Advanced topics
4###############
5
Wenzel Jakob93296692015-10-13 23:21:54 +02006For brevity, the rest of this chapter assumes that the following two lines are
7present:
8
9.. code-block:: cpp
10
Wenzel Jakob8f4eb002015-10-15 18:13:33 +020011 #include <pybind11/pybind11.h>
Wenzel Jakob93296692015-10-13 23:21:54 +020012
Wenzel Jakob10e62e12015-10-15 22:46:07 +020013 namespace py = pybind11;
Wenzel Jakob93296692015-10-13 23:21:54 +020014
Wenzel Jakobde3ad072016-02-02 11:38:21 +010015Exporting constants and mutable objects
16=======================================
17
18To expose a C++ constant, use the ``attr`` function to register it in a module
19as shown below. The ``int_`` class is one of many small wrapper objects defined
20in ``pybind11/pytypes.h``. General objects (including integers) can also be
21converted using the function ``cast``.
22
23.. code-block:: cpp
24
25 PYBIND11_PLUGIN(example) {
26 py::module m("example", "pybind11 example plugin");
27 m.attr("MY_CONSTANT") = py::int_(123);
28 m.attr("MY_CONSTANT_2") = py::cast(new MyObject());
29 }
30
Wenzel Jakob28f98aa2015-10-13 02:57:16 +020031Operator overloading
32====================
33
Wenzel Jakob93296692015-10-13 23:21:54 +020034Suppose that we're given the following ``Vector2`` class with a vector addition
35and scalar multiplication operation, all implemented using overloaded operators
36in C++.
37
38.. code-block:: cpp
39
40 class Vector2 {
41 public:
42 Vector2(float x, float y) : x(x), y(y) { }
43
Wenzel Jakob93296692015-10-13 23:21:54 +020044 Vector2 operator+(const Vector2 &v) const { return Vector2(x + v.x, y + v.y); }
45 Vector2 operator*(float value) const { return Vector2(x * value, y * value); }
46 Vector2& operator+=(const Vector2 &v) { x += v.x; y += v.y; return *this; }
47 Vector2& operator*=(float v) { x *= v; y *= v; return *this; }
48
Wenzel Jakobf64feaf2016-04-28 14:33:45 +020049 friend Vector2 operator*(float f, const Vector2 &v) {
50 return Vector2(f * v.x, f * v.y);
51 }
Wenzel Jakob93296692015-10-13 23:21:54 +020052
Wenzel Jakobf64feaf2016-04-28 14:33:45 +020053 std::string toString() const {
54 return "[" + std::to_string(x) + ", " + std::to_string(y) + "]";
55 }
Wenzel Jakob93296692015-10-13 23:21:54 +020056 private:
57 float x, y;
58 };
59
60The following snippet shows how the above operators can be conveniently exposed
61to Python.
62
63.. code-block:: cpp
64
Wenzel Jakob8f4eb002015-10-15 18:13:33 +020065 #include <pybind11/operators.h>
Wenzel Jakob93296692015-10-13 23:21:54 +020066
Wenzel Jakobb1b71402015-10-18 16:48:30 +020067 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +020068 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +020069
70 py::class_<Vector2>(m, "Vector2")
71 .def(py::init<float, float>())
72 .def(py::self + py::self)
73 .def(py::self += py::self)
74 .def(py::self *= float())
75 .def(float() * py::self)
76 .def("__repr__", &Vector2::toString);
77
78 return m.ptr();
79 }
80
81Note that a line like
82
83.. code-block:: cpp
84
85 .def(py::self * float())
86
87is really just short hand notation for
88
89.. code-block:: cpp
90
91 .def("__mul__", [](const Vector2 &a, float b) {
92 return a * b;
93 })
94
95This can be useful for exposing additional operators that don't exist on the
96C++ side, or to perform other types of customization.
97
98.. note::
99
100 To use the more convenient ``py::self`` notation, the additional
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200101 header file :file:`pybind11/operators.h` must be included.
Wenzel Jakob93296692015-10-13 23:21:54 +0200102
103.. seealso::
104
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200105 The file :file:`tests/test_operator_overloading.cpp` contains a
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400106 complete example that demonstrates how to work with overloaded operators in
107 more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +0200108
109Callbacks and passing anonymous functions
110=========================================
111
112The C++11 standard brought lambda functions and the generic polymorphic
113function wrapper ``std::function<>`` to the C++ programming language, which
114enable powerful new ways of working with functions. Lambda functions come in
115two flavors: stateless lambda function resemble classic function pointers that
116link to an anonymous piece of code, while stateful lambda functions
117additionally depend on captured variables that are stored in an anonymous
118*lambda closure object*.
119
120Here is a simple example of a C++ function that takes an arbitrary function
121(stateful or stateless) with signature ``int -> int`` as an argument and runs
122it with the value 10.
123
124.. code-block:: cpp
125
126 int func_arg(const std::function<int(int)> &f) {
127 return f(10);
128 }
129
130The example below is more involved: it takes a function of signature ``int -> int``
131and returns another function of the same kind. The return value is a stateful
132lambda function, which stores the value ``f`` in the capture object and adds 1 to
133its return value upon execution.
134
135.. code-block:: cpp
136
137 std::function<int(int)> func_ret(const std::function<int(int)> &f) {
138 return [f](int i) {
139 return f(i) + 1;
140 };
141 }
142
Brad Harmon835fc062016-06-16 13:19:15 -0500143This example demonstrates using python named parameters in C++ callbacks which
144requires using ``py::cpp_function`` as a wrapper. Usage is similar to defining
145methods of classes:
146
147.. code-block:: cpp
148
149 py::cpp_function func_cpp() {
150 return py::cpp_function([](int i) { return i+1; },
151 py::arg("number"));
152 }
153
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200154After including the extra header file :file:`pybind11/functional.h`, it is almost
Brad Harmon835fc062016-06-16 13:19:15 -0500155trivial to generate binding code for all of these functions.
Wenzel Jakob93296692015-10-13 23:21:54 +0200156
157.. code-block:: cpp
158
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200159 #include <pybind11/functional.h>
Wenzel Jakob93296692015-10-13 23:21:54 +0200160
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200161 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200162 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200163
164 m.def("func_arg", &func_arg);
165 m.def("func_ret", &func_ret);
Brad Harmon835fc062016-06-16 13:19:15 -0500166 m.def("func_cpp", &func_cpp);
Wenzel Jakob93296692015-10-13 23:21:54 +0200167
168 return m.ptr();
169 }
170
171The following interactive session shows how to call them from Python.
172
Wenzel Jakob99279f72016-06-03 11:19:29 +0200173.. code-block:: pycon
Wenzel Jakob93296692015-10-13 23:21:54 +0200174
175 $ python
176 >>> import example
177 >>> def square(i):
178 ... return i * i
179 ...
180 >>> example.func_arg(square)
181 100L
182 >>> square_plus_1 = example.func_ret(square)
183 >>> square_plus_1(4)
184 17L
Brad Harmon835fc062016-06-16 13:19:15 -0500185 >>> plus_1 = func_cpp()
186 >>> plus_1(number=43)
187 44L
Wenzel Jakob93296692015-10-13 23:21:54 +0200188
Wenzel Jakoba4175d62015-11-17 08:30:34 +0100189.. warning::
190
191 Keep in mind that passing a function from C++ to Python (or vice versa)
192 will instantiate a piece of wrapper code that translates function
Wenzel Jakob954b7932016-07-10 10:13:18 +0200193 invocations between the two languages. Naturally, this translation
194 increases the computational cost of each function call somewhat. A
195 problematic situation can arise when a function is copied back and forth
196 between Python and C++ many times in a row, in which case the underlying
197 wrappers will accumulate correspondingly. The resulting long sequence of
198 C++ -> Python -> C++ -> ... roundtrips can significantly decrease
199 performance.
200
201 There is one exception: pybind11 detects case where a stateless function
202 (i.e. a function pointer or a lambda function without captured variables)
203 is passed as an argument to another C++ function exposed in Python. In this
204 case, there is no overhead. Pybind11 will extract the underlying C++
205 function pointer from the wrapped function to sidestep a potential C++ ->
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200206 Python -> C++ roundtrip. This is demonstrated in :file:`tests/test_callbacks.cpp`.
Wenzel Jakob954b7932016-07-10 10:13:18 +0200207
208.. note::
209
210 This functionality is very useful when generating bindings for callbacks in
211 C++ libraries (e.g. GUI libraries, asynchronous networking libraries, etc.).
212
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200213 The file :file:`tests/test_callbacks.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400214 that demonstrates how to work with callbacks and anonymous functions in
215 more detail.
Wenzel Jakoba4175d62015-11-17 08:30:34 +0100216
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200217Overriding virtual functions in Python
218======================================
219
Wenzel Jakob93296692015-10-13 23:21:54 +0200220Suppose that a C++ class or interface has a virtual function that we'd like to
221to override from within Python (we'll focus on the class ``Animal``; ``Dog`` is
222given as a specific example of how one would do this with traditional C++
223code).
224
225.. code-block:: cpp
226
227 class Animal {
228 public:
229 virtual ~Animal() { }
230 virtual std::string go(int n_times) = 0;
231 };
232
233 class Dog : public Animal {
234 public:
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400235 std::string go(int n_times) override {
Wenzel Jakob93296692015-10-13 23:21:54 +0200236 std::string result;
237 for (int i=0; i<n_times; ++i)
238 result += "woof! ";
239 return result;
240 }
241 };
242
243Let's also suppose that we are given a plain function which calls the
244function ``go()`` on an arbitrary ``Animal`` instance.
245
246.. code-block:: cpp
247
248 std::string call_go(Animal *animal) {
249 return animal->go(3);
250 }
251
252Normally, the binding code for these classes would look as follows:
253
254.. code-block:: cpp
255
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200256 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200257 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200258
259 py::class_<Animal> animal(m, "Animal");
260 animal
261 .def("go", &Animal::go);
262
263 py::class_<Dog>(m, "Dog", animal)
264 .def(py::init<>());
265
266 m.def("call_go", &call_go);
267
268 return m.ptr();
269 }
270
271However, these bindings are impossible to extend: ``Animal`` is not
272constructible, and we clearly require some kind of "trampoline" that
273redirects virtual calls back to Python.
274
275Defining a new type of ``Animal`` from within Python is possible but requires a
276helper class that is defined as follows:
277
278.. code-block:: cpp
279
280 class PyAnimal : public Animal {
281 public:
282 /* Inherit the constructors */
283 using Animal::Animal;
284
285 /* Trampoline (need one for each virtual function) */
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400286 std::string go(int n_times) override {
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200287 PYBIND11_OVERLOAD_PURE(
Wenzel Jakob93296692015-10-13 23:21:54 +0200288 std::string, /* Return type */
289 Animal, /* Parent class */
290 go, /* Name of function */
291 n_times /* Argument(s) */
292 );
293 }
294 };
295
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200296The macro :func:`PYBIND11_OVERLOAD_PURE` should be used for pure virtual
297functions, and :func:`PYBIND11_OVERLOAD` should be used for functions which have
Wenzel Jakob0d3fc352016-07-08 10:52:10 +0200298a default implementation.
Wenzel Jakob1e3be732016-05-24 23:42:05 +0200299
300There are also two alternate macros :func:`PYBIND11_OVERLOAD_PURE_NAME` and
Jason Rhinelander64830e32016-08-29 16:58:59 -0400301:func:`PYBIND11_OVERLOAD_NAME` which take a string-valued name argument between
302the *Parent class* and *Name of the function* slots. This is useful when the
303C++ and Python versions of the function have different names, e.g.
304``operator()`` vs ``__call__``.
Wenzel Jakob1e3be732016-05-24 23:42:05 +0200305
306The binding code also needs a few minor adaptations (highlighted):
Wenzel Jakob93296692015-10-13 23:21:54 +0200307
308.. code-block:: cpp
309 :emphasize-lines: 4,6,7
310
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200311 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200312 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200313
Jason Rhinelander5fffe202016-09-06 12:17:06 -0400314 py::class_<Animal, PyAnimal /* <--- trampoline*/> animal(m, "Animal");
Wenzel Jakob93296692015-10-13 23:21:54 +0200315 animal
Wenzel Jakob93296692015-10-13 23:21:54 +0200316 .def(py::init<>())
317 .def("go", &Animal::go);
318
319 py::class_<Dog>(m, "Dog", animal)
320 .def(py::init<>());
321
322 m.def("call_go", &call_go);
323
324 return m.ptr();
325 }
326
Wenzel Jakob86d825f2016-05-26 13:19:27 +0200327Importantly, pybind11 is made aware of the trampoline trampoline helper class
Jason Rhinelander5fffe202016-09-06 12:17:06 -0400328by specifying it as an extra template argument to :class:`class_`. (This can
329also be combined with other template arguments such as a custom holder type;
330the order of template types does not matter). Following this, we are able to
331define a constructor as usual.
Wenzel Jakob93296692015-10-13 23:21:54 +0200332
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400333Note, however, that the above is sufficient for allowing python classes to
334extend ``Animal``, but not ``Dog``: see ref:`virtual_and_inheritance` for the
335necessary steps required to providing proper overload support for inherited
336classes.
337
Wenzel Jakob93296692015-10-13 23:21:54 +0200338The Python session below shows how to override ``Animal::go`` and invoke it via
339a virtual method call.
340
Wenzel Jakob99279f72016-06-03 11:19:29 +0200341.. code-block:: pycon
Wenzel Jakob93296692015-10-13 23:21:54 +0200342
343 >>> from example import *
344 >>> d = Dog()
345 >>> call_go(d)
346 u'woof! woof! woof! '
347 >>> class Cat(Animal):
348 ... def go(self, n_times):
349 ... return "meow! " * n_times
350 ...
351 >>> c = Cat()
352 >>> call_go(c)
353 u'meow! meow! meow! '
354
Wenzel Jakob9bb97c12016-06-03 11:19:41 +0200355Please take a look at the :ref:`macro_notes` before using this feature.
Wenzel Jakobbd986fe2016-05-21 10:48:30 +0200356
Wenzel Jakob93296692015-10-13 23:21:54 +0200357.. seealso::
358
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200359 The file :file:`tests/test_virtual_functions.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400360 example that demonstrates how to override virtual functions using pybind11
361 in more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +0200362
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400363.. _virtual_and_inheritance:
364
365Combining virtual functions and inheritance
366===========================================
367
368When combining virtual methods with inheritance, you need to be sure to provide
369an override for each method for which you want to allow overrides from derived
370python classes. For example, suppose we extend the above ``Animal``/``Dog``
371example as follows:
372
373.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200374
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400375 class Animal {
376 public:
377 virtual std::string go(int n_times) = 0;
378 virtual std::string name() { return "unknown"; }
379 };
380 class Dog : public class Animal {
381 public:
382 std::string go(int n_times) override {
383 std::string result;
384 for (int i=0; i<n_times; ++i)
385 result += bark() + " ";
386 return result;
387 }
388 virtual std::string bark() { return "woof!"; }
389 };
390
391then the trampoline class for ``Animal`` must, as described in the previous
392section, override ``go()`` and ``name()``, but in order to allow python code to
393inherit properly from ``Dog``, we also need a trampoline class for ``Dog`` that
394overrides both the added ``bark()`` method *and* the ``go()`` and ``name()``
395methods inherited from ``Animal`` (even though ``Dog`` doesn't directly
396override the ``name()`` method):
397
398.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200399
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400400 class PyAnimal : public Animal {
401 public:
402 using Animal::Animal; // Inherit constructors
403 std::string go(int n_times) override { PYBIND11_OVERLOAD_PURE(std::string, Animal, go, n_times); }
404 std::string name() override { PYBIND11_OVERLOAD(std::string, Animal, name, ); }
405 };
406 class PyDog : public Dog {
407 public:
408 using Dog::Dog; // Inherit constructors
409 std::string go(int n_times) override { PYBIND11_OVERLOAD_PURE(std::string, Dog, go, n_times); }
410 std::string name() override { PYBIND11_OVERLOAD(std::string, Dog, name, ); }
411 std::string bark() override { PYBIND11_OVERLOAD(std::string, Dog, bark, ); }
412 };
413
414A registered class derived from a pybind11-registered class with virtual
415methods requires a similar trampoline class, *even if* it doesn't explicitly
416declare or override any virtual methods itself:
417
418.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200419
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400420 class Husky : public Dog {};
421 class PyHusky : public Husky {
422 using Dog::Dog; // Inherit constructors
423 std::string go(int n_times) override { PYBIND11_OVERLOAD_PURE(std::string, Husky, go, n_times); }
424 std::string name() override { PYBIND11_OVERLOAD(std::string, Husky, name, ); }
425 std::string bark() override { PYBIND11_OVERLOAD(std::string, Husky, bark, ); }
426 };
427
428There is, however, a technique that can be used to avoid this duplication
429(which can be especially helpful for a base class with several virtual
430methods). The technique involves using template trampoline classes, as
431follows:
432
433.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200434
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400435 template <class AnimalBase = Animal> class PyAnimal : public AnimalBase {
436 using AnimalBase::AnimalBase; // Inherit constructors
437 std::string go(int n_times) override { PYBIND11_OVERLOAD_PURE(std::string, AnimalBase, go, n_times); }
438 std::string name() override { PYBIND11_OVERLOAD(std::string, AnimalBase, name, ); }
439 };
440 template <class DogBase = Dog> class PyDog : public PyAnimal<DogBase> {
441 using PyAnimal<DogBase>::PyAnimal; // Inherit constructors
442 // Override PyAnimal's pure virtual go() with a non-pure one:
443 std::string go(int n_times) override { PYBIND11_OVERLOAD(std::string, DogBase, go, n_times); }
444 std::string bark() override { PYBIND11_OVERLOAD(std::string, DogBase, bark, ); }
445 };
446
447This technique has the advantage of requiring just one trampoline method to be
448declared per virtual method and pure virtual method override. It does,
449however, require the compiler to generate at least as many methods (and
450possibly more, if both pure virtual and overridden pure virtual methods are
451exposed, as above).
452
453The classes are then registered with pybind11 using:
454
455.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200456
Jason Rhinelander5fffe202016-09-06 12:17:06 -0400457 py::class_<Animal, PyAnimal<>> animal(m, "Animal");
458 py::class_<Dog, PyDog<>> dog(m, "Dog");
459 py::class_<Husky, PyDog<Husky>> husky(m, "Husky");
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400460 // ... add animal, dog, husky definitions
461
462Note that ``Husky`` did not require a dedicated trampoline template class at
463all, since it neither declares any new virtual methods nor provides any pure
464virtual method implementations.
465
466With either the repeated-virtuals or templated trampoline methods in place, you
467can now create a python class that inherits from ``Dog``:
468
469.. code-block:: python
470
471 class ShihTzu(Dog):
472 def bark(self):
473 return "yip!"
474
475.. seealso::
476
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200477 See the file :file:`tests/test_virtual_functions.cpp` for complete examples
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400478 using both the duplication and templated trampoline approaches.
479
Jason Rhinelanderec62d972016-09-09 02:42:51 -0400480Extended trampoline class functionality
481=======================================
482
483The trampoline classes described in the previous sections are, by default, only
484initialized when needed. More specifically, they are initialized when a python
485class actually inherits from a registered type (instead of merely creating an
486instance of the registered type), or when a registered constructor is only
487valid for the trampoline class but not the registered class. This is primarily
488for performance reasons: when the trampoline class is not needed for anything
489except virtual method dispatching, not initializing the trampoline class
490improves performance by avoiding needing to do a run-time check to see if the
491inheriting python instance has an overloaded method.
492
493Sometimes, however, it is useful to always initialize a trampoline class as an
494intermediate class that does more than just handle virtual method dispatching.
495For example, such a class might perform extra class initialization, extra
496destruction operations, and might define new members and methods to enable a
497more python-like interface to a class.
498
499In order to tell pybind11 that it should *always* initialize the trampoline
500class when creating new instances of a type, the class constructors should be
501declared using ``py::init_alias<Args, ...>()`` instead of the usual
502``py::init<Args, ...>()``. This forces construction via the trampoline class,
503ensuring member initialization and (eventual) destruction.
504
505.. seealso::
506
507 See the file :file:`tests/test_alias_initialization.cpp` for complete examples
508 showing both normal and forced trampoline instantiation.
509
Wenzel Jakob9bb97c12016-06-03 11:19:41 +0200510.. _macro_notes:
511
512General notes regarding convenience macros
513==========================================
514
515pybind11 provides a few convenience macros such as
516:func:`PYBIND11_MAKE_OPAQUE` and :func:`PYBIND11_DECLARE_HOLDER_TYPE`, and
517``PYBIND11_OVERLOAD_*``. Since these are "just" macros that are evaluated
518in the preprocessor (which has no concept of types), they *will* get confused
519by commas in a template argument such as ``PYBIND11_OVERLOAD(MyReturnValue<T1,
520T2>, myFunc)``. In this case, the preprocessor assumes that the comma indicates
521the beginnning of the next parameter. Use a ``typedef`` to bind the template to
522another name and use it in the macro to avoid this problem.
523
524
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100525Global Interpreter Lock (GIL)
526=============================
527
528The classes :class:`gil_scoped_release` and :class:`gil_scoped_acquire` can be
529used to acquire and release the global interpreter lock in the body of a C++
530function call. In this way, long-running C++ code can be parallelized using
531multiple Python threads. Taking the previous section as an example, this could
532be realized as follows (important changes highlighted):
533
534.. code-block:: cpp
535 :emphasize-lines: 8,9,33,34
536
537 class PyAnimal : public Animal {
538 public:
539 /* Inherit the constructors */
540 using Animal::Animal;
541
542 /* Trampoline (need one for each virtual function) */
543 std::string go(int n_times) {
544 /* Acquire GIL before calling Python code */
Wenzel Jakoba4caa852015-12-14 12:39:02 +0100545 py::gil_scoped_acquire acquire;
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100546
547 PYBIND11_OVERLOAD_PURE(
548 std::string, /* Return type */
549 Animal, /* Parent class */
550 go, /* Name of function */
551 n_times /* Argument(s) */
552 );
553 }
554 };
555
556 PYBIND11_PLUGIN(example) {
557 py::module m("example", "pybind11 example plugin");
558
Jason Rhinelander5fffe202016-09-06 12:17:06 -0400559 py::class_<Animal, PyAnimal> animal(m, "Animal");
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100560 animal
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100561 .def(py::init<>())
562 .def("go", &Animal::go);
563
564 py::class_<Dog>(m, "Dog", animal)
565 .def(py::init<>());
566
567 m.def("call_go", [](Animal *animal) -> std::string {
568 /* Release GIL before calling into (potentially long-running) C++ code */
Wenzel Jakoba4caa852015-12-14 12:39:02 +0100569 py::gil_scoped_release release;
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100570 return call_go(animal);
571 });
572
573 return m.ptr();
574 }
575
Wenzel Jakob93296692015-10-13 23:21:54 +0200576Passing STL data structures
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200577===========================
578
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200579When including the additional header file :file:`pybind11/stl.h`, conversions
Wenzel Jakob978e3762016-04-07 18:00:41 +0200580between ``std::vector<>``, ``std::list<>``, ``std::set<>``, and ``std::map<>``
581and the Python ``list``, ``set`` and ``dict`` data structures are automatically
582enabled. The types ``std::pair<>`` and ``std::tuple<>`` are already supported
583out of the box with just the core :file:`pybind11/pybind11.h` header.
Wenzel Jakob93296692015-10-13 23:21:54 +0200584
Wenzel Jakobfe342412016-09-06 13:02:29 +0900585The major downside of these implicit conversions is that containers must be
586converted (i.e. copied) on every Python->C++ and C++->Python transition, which
587can have implications on the program semantics and performance. Please read the
588next sections for more details and alternative approaches that avoid this.
Sergey Lyskov75204182016-08-29 22:50:38 -0400589
Wenzel Jakob93296692015-10-13 23:21:54 +0200590.. note::
591
Wenzel Jakobfe342412016-09-06 13:02:29 +0900592 Arbitrary nesting of any of these types is possible.
Wenzel Jakob93296692015-10-13 23:21:54 +0200593
594.. seealso::
595
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200596 The file :file:`tests/test_python_types.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400597 example that demonstrates how to pass STL data types in more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +0200598
Wenzel Jakobfe342412016-09-06 13:02:29 +0900599.. _opaque:
600
601Treating STL data structures as opaque objects
602==============================================
603
604pybind11 heavily relies on a template matching mechanism to convert parameters
605and return values that are constructed from STL data types such as vectors,
606linked lists, hash tables, etc. This even works in a recursive manner, for
607instance to deal with lists of hash maps of pairs of elementary and custom
608types, etc.
609
610However, a fundamental limitation of this approach is that internal conversions
611between Python and C++ types involve a copy operation that prevents
612pass-by-reference semantics. What does this mean?
613
614Suppose we bind the following function
615
616.. code-block:: cpp
617
618 void append_1(std::vector<int> &v) {
619 v.push_back(1);
620 }
621
622and call it from Python, the following happens:
623
624.. code-block:: pycon
625
626 >>> v = [5, 6]
627 >>> append_1(v)
628 >>> print(v)
629 [5, 6]
630
631As you can see, when passing STL data structures by reference, modifications
632are not propagated back the Python side. A similar situation arises when
633exposing STL data structures using the ``def_readwrite`` or ``def_readonly``
634functions:
635
636.. code-block:: cpp
637
638 /* ... definition ... */
639
640 class MyClass {
641 std::vector<int> contents;
642 };
643
644 /* ... binding code ... */
645
646 py::class_<MyClass>(m, "MyClass")
647 .def(py::init<>)
648 .def_readwrite("contents", &MyClass::contents);
649
650In this case, properties can be read and written in their entirety. However, an
651``append`` operaton involving such a list type has no effect:
652
653.. code-block:: pycon
654
655 >>> m = MyClass()
656 >>> m.contents = [5, 6]
657 >>> print(m.contents)
658 [5, 6]
659 >>> m.contents.append(7)
660 >>> print(m.contents)
661 [5, 6]
662
663Finally, the involved copy operations can be costly when dealing with very
664large lists. To deal with all of the above situations, pybind11 provides a
665macro named ``PYBIND11_MAKE_OPAQUE(T)`` that disables the template-based
666conversion machinery of types, thus rendering them *opaque*. The contents of
667opaque objects are never inspected or extracted, hence they *can* be passed by
668reference. For instance, to turn ``std::vector<int>`` into an opaque type, add
669the declaration
670
671.. code-block:: cpp
672
673 PYBIND11_MAKE_OPAQUE(std::vector<int>);
674
675before any binding code (e.g. invocations to ``class_::def()``, etc.). This
676macro must be specified at the top level (and outside of any namespaces), since
677it instantiates a partial template overload. If your binding code consists of
678multiple compilation units, it must be present in every file preceding any
679usage of ``std::vector<int>``. Opaque types must also have a corresponding
680``class_`` declaration to associate them with a name in Python, and to define a
681set of available operations, e.g.:
682
683.. code-block:: cpp
684
685 py::class_<std::vector<int>>(m, "IntVector")
686 .def(py::init<>())
687 .def("clear", &std::vector<int>::clear)
688 .def("pop_back", &std::vector<int>::pop_back)
689 .def("__len__", [](const std::vector<int> &v) { return v.size(); })
690 .def("__iter__", [](std::vector<int> &v) {
691 return py::make_iterator(v.begin(), v.end());
692 }, py::keep_alive<0, 1>()) /* Keep vector alive while iterator is used */
693 // ....
694
695The ability to expose STL containers as native Python objects is a fairly
696common request, hence pybind11 also provides an optional header file named
697:file:`pybind11/stl_bind.h` that does exactly this. The mapped containers try
698to match the behavior of their native Python counterparts as much as possible.
699
700The following example showcases usage of :file:`pybind11/stl_bind.h`:
701
702.. code-block:: cpp
703
704 // Don't forget this
705 #include <pybind11/stl_bind.h>
706
707 PYBIND11_MAKE_OPAQUE(std::vector<int>);
708 PYBIND11_MAKE_OPAQUE(std::map<std::string, double>);
709
710 // ...
711
712 // later in binding code:
713 py::bind_vector<std::vector<int>>(m, "VectorInt");
714 py::bind_map<std::map<std::string, double>>(m, "MapStringDouble");
715
716Please take a look at the :ref:`macro_notes` before using the
717``PYBIND11_MAKE_OPAQUE`` macro.
718
719.. seealso::
720
721 The file :file:`tests/test_opaque_types.cpp` contains a complete
722 example that demonstrates how to create and expose opaque types using
723 pybind11 in more detail.
724
725 The file :file:`tests/test_stl_binders.cpp` shows how to use the
726 convenience STL container wrappers.
727
728
Wenzel Jakobb2825952016-04-13 23:33:00 +0200729Binding sequence data types, iterators, the slicing protocol, etc.
730==================================================================
Wenzel Jakob93296692015-10-13 23:21:54 +0200731
732Please refer to the supplemental example for details.
733
734.. seealso::
735
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200736 The file :file:`tests/test_sequences_and_iterators.cpp` contains a
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400737 complete example that shows how to bind a sequence data type, including
738 length queries (``__len__``), iterators (``__iter__``), the slicing
739 protocol and other kinds of useful operations.
Wenzel Jakob93296692015-10-13 23:21:54 +0200740
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200741Return value policies
742=====================
743
Wenzel Jakob93296692015-10-13 23:21:54 +0200744Python and C++ use wildly different ways of managing the memory and lifetime of
745objects managed by them. This can lead to issues when creating bindings for
746functions that return a non-trivial type. Just by looking at the type
747information, it is not clear whether Python should take charge of the returned
748value and eventually free its resources, or if this is handled on the C++ side.
749For this reason, pybind11 provides a several `return value policy` annotations
750that can be passed to the :func:`module::def` and :func:`class_::def`
Wenzel Jakob61d67f02015-12-14 12:53:06 +0100751functions. The default policy is :enum:`return_value_policy::automatic`.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200752
Wenzel Jakobbf099582016-08-22 12:52:02 +0200753Return value policies can also be applied to properties, in which case the
754arguments must be passed through the :class:`cpp_function` constructor:
755
756.. code-block:: cpp
757
758 class_<MyClass>(m, "MyClass")
759 def_property("data"
760 py::cpp_function(&MyClass::getData, py::return_value_policy::copy),
761 py::cpp_function(&MyClass::setData)
762 );
763
764The following table provides an overview of the available return value policies:
765
Wenzel Jakobf64feaf2016-04-28 14:33:45 +0200766.. tabularcolumns:: |p{0.5\textwidth}|p{0.45\textwidth}|
767
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200768+--------------------------------------------------+----------------------------------------------------------------------------+
769| Return value policy | Description |
770+==================================================+============================================================================+
771| :enum:`return_value_policy::automatic` | This is the default return value policy, which falls back to the policy |
772| | :enum:`return_value_policy::take_ownership` when the return value is a |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200773| | pointer. Otherwise, it uses :enum:`return_value::move` or |
774| | :enum:`return_value::copy` for rvalue and lvalue references, respectively. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200775| | See below for a description of what all of these different policies do. |
776+--------------------------------------------------+----------------------------------------------------------------------------+
777| :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 +0200778| | return value is a pointer. This is the default conversion policy for |
779| | function arguments when calling Python functions manually from C++ code |
780| | (i.e. via handle::operator()). You probably won't need to use this. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200781+--------------------------------------------------+----------------------------------------------------------------------------+
782| :enum:`return_value_policy::take_ownership` | Reference an existing object (i.e. do not create a new copy) and take |
783| | ownership. Python will call the destructor and delete operator when the |
784| | object's reference count reaches zero. Undefined behavior ensues when the |
Wenzel Jakobf53e3002016-06-30 14:59:23 +0200785| | C++ side does the same. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200786+--------------------------------------------------+----------------------------------------------------------------------------+
787| :enum:`return_value_policy::copy` | Create a new copy of the returned object, which will be owned by Python. |
788| | This policy is comparably safe because the lifetimes of the two instances |
789| | are decoupled. |
790+--------------------------------------------------+----------------------------------------------------------------------------+
791| :enum:`return_value_policy::move` | Use ``std::move`` to move the return value contents into a new instance |
792| | that will be owned by Python. This policy is comparably safe because the |
793| | lifetimes of the two instances (move source and destination) are decoupled.|
794+--------------------------------------------------+----------------------------------------------------------------------------+
795| :enum:`return_value_policy::reference` | Reference an existing object, but do not take ownership. The C++ side is |
796| | responsible for managing the object's lifetime and deallocating it when |
797| | it is no longer used. Warning: undefined behavior will ensue when the C++ |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200798| | side deletes an object that is still referenced and used by Python. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200799+--------------------------------------------------+----------------------------------------------------------------------------+
Wenzel Jakobbf099582016-08-22 12:52:02 +0200800| :enum:`return_value_policy::reference_internal` | Indicates that the lifetime of the return value is tied to the lifetime |
801| | of a parent object, namely the implicit ``this``, or ``self`` argument of |
802| | the called method or property. Internally, this policy works just like |
803| | :enum:`return_value_policy::reference` but additionally applies a |
804| | ``keep_alive<0, 1>`` *call policy* (described in the next section) that |
805| | prevents the parent object from being garbage collected as long as the |
806| | return value is referenced by Python. This is the default policy for |
807| | property getters created via ``def_property``, ``def_readwrite``, etc.) |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200808+--------------------------------------------------+----------------------------------------------------------------------------+
Wenzel Jakob93296692015-10-13 23:21:54 +0200809
Wenzel Jakobfb6aed22016-07-18 20:29:53 +0200810.. warning::
811
Jason Rhinelanderefc2aa72016-08-10 11:38:33 -0400812 Code with invalid return value policies might access unitialized memory or
813 free data structures multiple times, which can lead to hard-to-debug
Wenzel Jakobfb6aed22016-07-18 20:29:53 +0200814 non-determinism and segmentation faults, hence it is worth spending the
815 time to understand all the different options in the table above.
816
Jason Rhinelanderefc2aa72016-08-10 11:38:33 -0400817One important aspect of the above policies is that they only apply to instances
818which pybind11 has *not* seen before, in which case the policy clarifies
819essential questions about the return value's lifetime and ownership. When
820pybind11 knows the instance already (as identified by its type and address in
Wenzel Jakobfb6aed22016-07-18 20:29:53 +0200821memory), it will return the existing Python object wrapper rather than creating
Wenzel Jakobbf099582016-08-22 12:52:02 +0200822a new copy.
nafur717df752016-06-28 18:07:11 +0200823
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200824.. note::
825
826 The next section on :ref:`call_policies` discusses *call policies* that can be
827 specified *in addition* to a return value policy from the list above. Call
828 policies indicate reference relationships that can involve both return values
829 and parameters of functions.
830
831.. note::
832
833 As an alternative to elaborate call policies and lifetime management logic,
834 consider using smart pointers (see the section on :ref:`smart_pointers` for
835 details). Smart pointers can tell whether an object is still referenced from
836 C++ or Python, which generally eliminates the kinds of inconsistencies that
837 can lead to crashes or undefined behavior. For functions returning smart
838 pointers, it is not necessary to specify a return value policy.
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100839
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200840.. _call_policies:
841
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100842Additional call policies
843========================
844
845In addition to the above return value policies, further `call policies` can be
846specified to indicate dependencies between parameters. There is currently just
847one policy named ``keep_alive<Nurse, Patient>``, which indicates that the
848argument with index ``Patient`` should be kept alive at least until the
Wenzel Jakob0b632312016-08-18 10:58:21 +0200849argument with index ``Nurse`` is freed by the garbage collector. Argument
850indices start at one, while zero refers to the return value. For methods, index
851``1`` refers to the implicit ``this`` pointer, while regular arguments begin at
852index ``2``. Arbitrarily many call policies can be specified. When a ``Nurse``
853with value ``None`` is detected at runtime, the call policy does nothing.
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100854
Wenzel Jakob0b632312016-08-18 10:58:21 +0200855This feature internally relies on the ability to create a *weak reference* to
856the nurse object, which is permitted by all classes exposed via pybind11. When
857the nurse object does not support weak references, an exception will be thrown.
858
859Consider the following example: here, the binding code for a list append
860operation ties the lifetime of the newly added element to the underlying
861container:
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100862
863.. code-block:: cpp
864
865 py::class_<List>(m, "List")
866 .def("append", &List::append, py::keep_alive<1, 2>());
867
868.. note::
869
870 ``keep_alive`` is analogous to the ``with_custodian_and_ward`` (if Nurse,
871 Patient != 0) and ``with_custodian_and_ward_postcall`` (if Nurse/Patient ==
872 0) policies from Boost.Python.
873
Wenzel Jakob61587162016-01-18 22:38:52 +0100874.. seealso::
875
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200876 The file :file:`tests/test_keep_alive.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400877 that demonstrates using :class:`keep_alive` in more detail.
Wenzel Jakob61587162016-01-18 22:38:52 +0100878
Wenzel Jakob93296692015-10-13 23:21:54 +0200879Implicit type conversions
880=========================
881
882Suppose that instances of two types ``A`` and ``B`` are used in a project, and
Wenzel Jakob8e93df82016-05-01 02:36:58 +0200883that an ``A`` can easily be converted into an instance of type ``B`` (examples of this
Wenzel Jakob93296692015-10-13 23:21:54 +0200884could be a fixed and an arbitrary precision number type).
885
886.. code-block:: cpp
887
888 py::class_<A>(m, "A")
889 /// ... members ...
890
891 py::class_<B>(m, "B")
892 .def(py::init<A>())
893 /// ... members ...
894
895 m.def("func",
896 [](const B &) { /* .... */ }
897 );
898
899To invoke the function ``func`` using a variable ``a`` containing an ``A``
900instance, we'd have to write ``func(B(a))`` in Python. On the other hand, C++
901will automatically apply an implicit type conversion, which makes it possible
902to directly write ``func(a)``.
903
904In this situation (i.e. where ``B`` has a constructor that converts from
905``A``), the following statement enables similar implicit conversions on the
906Python side:
907
908.. code-block:: cpp
909
910 py::implicitly_convertible<A, B>();
911
Wenzel Jakob3eeea6f2016-06-30 18:10:28 +0200912.. note::
913
914 Implicit conversions from ``A`` to ``B`` only work when ``B`` is a custom
915 data type that is exposed to Python via pybind11.
916
Wenzel Jakobf88af0c2016-06-22 13:52:31 +0200917.. _static_properties:
918
919Static properties
920=================
921
922The section on :ref:`properties` discussed the creation of instance properties
923that are implemented in terms of C++ getters and setters.
924
925Static properties can also be created in a similar way to expose getters and
926setters of static class attributes. It is important to note that the implicit
927``self`` argument also exists in this case and is used to pass the Python
928``type`` subclass instance. This parameter will often not be needed by the C++
929side, and the following example illustrates how to instantiate a lambda getter
930function that ignores it:
931
932.. code-block:: cpp
933
934 py::class_<Foo>(m, "Foo")
935 .def_property_readonly_static("foo", [](py::object /* self */) { return Foo(); });
936
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200937Unique pointers
938===============
939
940Given a class ``Example`` with Python bindings, it's possible to return
941instances wrapped in C++11 unique pointers, like so
942
943.. code-block:: cpp
944
945 std::unique_ptr<Example> create_example() { return std::unique_ptr<Example>(new Example()); }
946
947.. code-block:: cpp
948
949 m.def("create_example", &create_example);
950
951In other words, there is nothing special that needs to be done. While returning
952unique pointers in this way is allowed, it is *illegal* to use them as function
953arguments. For instance, the following function signature cannot be processed
954by pybind11.
955
956.. code-block:: cpp
957
958 void do_something_with_example(std::unique_ptr<Example> ex) { ... }
959
960The above signature would imply that Python needs to give up ownership of an
961object that is passed to this function, which is generally not possible (for
962instance, the object might be referenced elsewhere).
963
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200964.. _smart_pointers:
965
Wenzel Jakob93296692015-10-13 23:21:54 +0200966Smart pointers
967==============
968
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200969This section explains how to pass values that are wrapped in "smart" pointer
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200970types with internal reference counting. For the simpler C++11 unique pointers,
971refer to the previous section.
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200972
Jason Rhinelander5fffe202016-09-06 12:17:06 -0400973The binding generator for classes, :class:`class_`, can be passed a template
974type that denotes a special *holder* type that is used to manage references to
975the object. If no such holder type template argument is given, the default for
976a type named ``Type`` is ``std::unique_ptr<Type>``, which means that the object
977is deallocated when Python's reference count goes to zero.
Wenzel Jakob93296692015-10-13 23:21:54 +0200978
Wenzel Jakob1853b652015-10-18 15:38:50 +0200979It is possible to switch to other types of reference counting wrappers or smart
980pointers, which is useful in codebases that rely on them. For instance, the
981following snippet causes ``std::shared_ptr`` to be used instead.
Wenzel Jakob93296692015-10-13 23:21:54 +0200982
983.. code-block:: cpp
984
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100985 py::class_<Example, std::shared_ptr<Example> /* <- holder type */> obj(m, "Example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100986
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100987Note that any particular class can only be associated with a single holder type.
Wenzel Jakob93296692015-10-13 23:21:54 +0200988
Wenzel Jakob1853b652015-10-18 15:38:50 +0200989To enable transparent conversions for functions that take shared pointers as an
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100990argument or that return them, a macro invocation similar to the following must
Wenzel Jakob1853b652015-10-18 15:38:50 +0200991be declared at the top level before any binding code:
992
993.. code-block:: cpp
994
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200995 PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr<T>);
Wenzel Jakob1853b652015-10-18 15:38:50 +0200996
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100997.. note::
Wenzel Jakob61d67f02015-12-14 12:53:06 +0100998
999 The first argument of :func:`PYBIND11_DECLARE_HOLDER_TYPE` should be a
1000 placeholder name that is used as a template parameter of the second
1001 argument. Thus, feel free to use any identifier, but use it consistently on
1002 both sides; also, don't use the name of a type that already exists in your
1003 codebase.
1004
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001005One potential stumbling block when using holder types is that they need to be
1006applied consistently. Can you guess what's broken about the following binding
1007code?
Wenzel Jakob6e213c92015-11-24 23:05:58 +01001008
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001009.. code-block:: cpp
Wenzel Jakob6e213c92015-11-24 23:05:58 +01001010
Jason Rhinelander5fffe202016-09-06 12:17:06 -04001011 PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr<T>);
1012
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001013 class Child { };
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001014
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001015 class Parent {
1016 public:
1017 Parent() : child(std::make_shared<Child>()) { }
1018 Child *get_child() { return child.get(); } /* Hint: ** DON'T DO THIS ** */
1019 private:
1020 std::shared_ptr<Child> child;
1021 };
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001022
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001023 PYBIND11_PLUGIN(example) {
1024 py::module m("example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001025
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001026 py::class_<Child, std::shared_ptr<Child>>(m, "Child");
1027
1028 py::class_<Parent, std::shared_ptr<Parent>>(m, "Parent")
1029 .def(py::init<>())
1030 .def("get_child", &Parent::get_child);
1031
1032 return m.ptr();
1033 }
1034
1035The following Python code will cause undefined behavior (and likely a
1036segmentation fault).
1037
1038.. code-block:: python
1039
1040 from example import Parent
1041 print(Parent().get_child())
1042
1043The problem is that ``Parent::get_child()`` returns a pointer to an instance of
1044``Child``, but the fact that this instance is already managed by
1045``std::shared_ptr<...>`` is lost when passing raw pointers. In this case,
1046pybind11 will create a second independent ``std::shared_ptr<...>`` that also
1047claims ownership of the pointer. In the end, the object will be freed **twice**
1048since these shared pointers have no way of knowing about each other.
1049
1050There are two ways to resolve this issue:
1051
10521. For types that are managed by a smart pointer class, never use raw pointers
1053 in function arguments or return values. In other words: always consistently
1054 wrap pointers into their designated holder types (such as
1055 ``std::shared_ptr<...>``). In this case, the signature of ``get_child()``
1056 should be modified as follows:
1057
1058.. code-block:: cpp
1059
1060 std::shared_ptr<Child> get_child() { return child; }
1061
10622. Adjust the definition of ``Child`` by specifying
1063 ``std::enable_shared_from_this<T>`` (see cppreference_ for details) as a
1064 base class. This adds a small bit of information to ``Child`` that allows
1065 pybind11 to realize that there is already an existing
1066 ``std::shared_ptr<...>`` and communicate with it. In this case, the
1067 declaration of ``Child`` should look as follows:
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001068
Wenzel Jakob6e213c92015-11-24 23:05:58 +01001069.. _cppreference: http://en.cppreference.com/w/cpp/memory/enable_shared_from_this
1070
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001071.. code-block:: cpp
1072
1073 class Child : public std::enable_shared_from_this<Child> { };
1074
Wenzel Jakob9bb97c12016-06-03 11:19:41 +02001075
1076Please take a look at the :ref:`macro_notes` before using this feature.
1077
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001078.. seealso::
1079
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001080 The file :file:`tests/test_smart_ptr.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001081 that demonstrates how to work with custom reference-counting holder types
1082 in more detail.
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001083
Wenzel Jakob93296692015-10-13 23:21:54 +02001084.. _custom_constructors:
1085
1086Custom constructors
1087===================
1088
1089The syntax for binding constructors was previously introduced, but it only
1090works when a constructor with the given parameters actually exists on the C++
1091side. To extend this to more general cases, let's take a look at what actually
1092happens under the hood: the following statement
1093
1094.. code-block:: cpp
1095
1096 py::class_<Example>(m, "Example")
1097 .def(py::init<int>());
1098
1099is short hand notation for
1100
1101.. code-block:: cpp
1102
1103 py::class_<Example>(m, "Example")
1104 .def("__init__",
1105 [](Example &instance, int arg) {
1106 new (&instance) Example(arg);
1107 }
1108 );
1109
1110In other words, :func:`init` creates an anonymous function that invokes an
1111in-place constructor. Memory allocation etc. is already take care of beforehand
1112within pybind11.
1113
Nickolai Belakovski63338252016-08-27 11:57:55 -07001114.. _classes_with_non_public_destructors:
1115
1116Classes with non-public destructors
1117===================================
1118
Wenzel Jakob5e4e4772016-08-28 02:03:15 +02001119If a class has a private or protected destructor (as might e.g. be the case in
1120a singleton pattern), a compile error will occur when creating bindings via
1121pybind11. The underlying issue is that the ``std::unique_ptr`` holder type that
1122is responsible for managing the lifetime of instances will reference the
1123destructor even if no deallocations ever take place. In order to expose classes
1124with private or protected destructors, it is possible to override the holder
Jason Rhinelander5fffe202016-09-06 12:17:06 -04001125type via a holder type argument to ``class_``. Pybind11 provides a helper class
Wenzel Jakob5e4e4772016-08-28 02:03:15 +02001126``py::nodelete`` that disables any destructor invocations. In this case, it is
1127crucial that instances are deallocated on the C++ side to avoid memory leaks.
Nickolai Belakovski63338252016-08-27 11:57:55 -07001128
1129.. code-block:: cpp
1130
1131 /* ... definition ... */
1132
1133 class MyClass {
Wenzel Jakob5e4e4772016-08-28 02:03:15 +02001134 private:
1135 ~MyClass() { }
Nickolai Belakovski63338252016-08-27 11:57:55 -07001136 };
1137
1138 /* ... binding code ... */
1139
Wenzel Jakob5e4e4772016-08-28 02:03:15 +02001140 py::class_<MyClass, std::unique_ptr<MyClass, py::nodelete>>(m, "MyClass")
Nickolai Belakovski63338252016-08-27 11:57:55 -07001141 .def(py::init<>)
1142
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001143.. _catching_and_throwing_exceptions:
1144
Wenzel Jakob93296692015-10-13 23:21:54 +02001145Catching and throwing exceptions
1146================================
1147
1148When C++ code invoked from Python throws an ``std::exception``, it is
1149automatically converted into a Python ``Exception``. pybind11 defines multiple
1150special exception classes that will map to different types of Python
1151exceptions:
1152
Wenzel Jakobf64feaf2016-04-28 14:33:45 +02001153.. tabularcolumns:: |p{0.5\textwidth}|p{0.45\textwidth}|
1154
Wenzel Jakob978e3762016-04-07 18:00:41 +02001155+--------------------------------------+------------------------------+
1156| C++ exception type | Python exception type |
1157+======================================+==============================+
1158| :class:`std::exception` | ``RuntimeError`` |
1159+--------------------------------------+------------------------------+
1160| :class:`std::bad_alloc` | ``MemoryError`` |
1161+--------------------------------------+------------------------------+
1162| :class:`std::domain_error` | ``ValueError`` |
1163+--------------------------------------+------------------------------+
1164| :class:`std::invalid_argument` | ``ValueError`` |
1165+--------------------------------------+------------------------------+
1166| :class:`std::length_error` | ``ValueError`` |
1167+--------------------------------------+------------------------------+
1168| :class:`std::out_of_range` | ``ValueError`` |
1169+--------------------------------------+------------------------------+
1170| :class:`std::range_error` | ``ValueError`` |
1171+--------------------------------------+------------------------------+
1172| :class:`pybind11::stop_iteration` | ``StopIteration`` (used to |
1173| | implement custom iterators) |
1174+--------------------------------------+------------------------------+
1175| :class:`pybind11::index_error` | ``IndexError`` (used to |
1176| | indicate out of bounds |
1177| | accesses in ``__getitem__``, |
1178| | ``__setitem__``, etc.) |
1179+--------------------------------------+------------------------------+
Sergey Lyskova95bde12016-05-08 19:31:55 -04001180| :class:`pybind11::value_error` | ``ValueError`` (used to |
1181| | indicate wrong value passed |
1182| | in ``container.remove(...)`` |
1183+--------------------------------------+------------------------------+
Jason Rhinelander5aa85be2016-08-11 21:22:05 -04001184| :class:`pybind11::key_error` | ``KeyError`` (used to |
1185| | indicate out of bounds |
1186| | accesses in ``__getitem__``, |
1187| | ``__setitem__`` in dict-like |
1188| | objects, etc.) |
1189+--------------------------------------+------------------------------+
Wenzel Jakob978e3762016-04-07 18:00:41 +02001190| :class:`pybind11::error_already_set` | Indicates that the Python |
1191| | exception flag has already |
1192| | been initialized |
1193+--------------------------------------+------------------------------+
Wenzel Jakob93296692015-10-13 23:21:54 +02001194
1195When a Python function invoked from C++ throws an exception, it is converted
1196into a C++ exception of type :class:`error_already_set` whose string payload
1197contains a textual summary.
1198
1199There is also a special exception :class:`cast_error` that is thrown by
1200:func:`handle::call` when the input arguments cannot be converted to Python
1201objects.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001202
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001203Registering custom exception translators
1204========================================
1205
1206If the default exception conversion policy described
1207:ref:`above <catching_and_throwing_exceptions>`
1208is insufficient, pybind11 also provides support for registering custom
1209exception translators.
1210
1211The function ``register_exception_translator(translator)`` takes a stateless
1212callable (e.g. a function pointer or a lambda function without captured
1213variables) with the following call signature: ``void(std::exception_ptr)``.
1214
1215When a C++ exception is thrown, registered exception translators are tried
1216in reverse order of registration (i.e. the last registered translator gets
1217a first shot at handling the exception).
1218
1219Inside the translator, ``std::rethrow_exception`` should be used within
1220a try block to re-throw the exception. A catch clause can then use
1221``PyErr_SetString`` to set a Python exception as demonstrated
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001222in :file:`tests/test_exceptions.cpp`.
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001223
1224This example also demonstrates how to create custom exception types
1225with ``py::exception``.
1226
1227The following example demonstrates this for a hypothetical exception class
1228``MyCustomException``:
1229
1230.. code-block:: cpp
1231
1232 py::register_exception_translator([](std::exception_ptr p) {
1233 try {
1234 if (p) std::rethrow_exception(p);
1235 } catch (const MyCustomException &e) {
1236 PyErr_SetString(PyExc_RuntimeError, e.what());
1237 }
1238 });
1239
1240Multiple exceptions can be handled by a single translator. If the exception is
1241not caught by the current translator, the previously registered one gets a
1242chance.
1243
1244If none of the registered exception translators is able to handle the
1245exception, it is handled by the default converter as described in the previous
1246section.
1247
1248.. note::
1249
1250 You must either call ``PyErr_SetString`` for every exception caught in a
1251 custom exception translator. Failure to do so will cause Python to crash
1252 with ``SystemError: error return without exception set``.
1253
1254 Exceptions that you do not plan to handle should simply not be caught.
1255
1256 You may also choose to explicity (re-)throw the exception to delegate it to
1257 the other existing exception translators.
1258
1259 The ``py::exception`` wrapper for creating custom exceptions cannot (yet)
Jason Rhinelander6b52c832016-09-06 12:27:00 -04001260 be used as a base type.
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001261
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001262.. _eigen:
1263
1264Transparent conversion of dense and sparse Eigen data types
1265===========================================================
1266
1267Eigen [#f1]_ is C++ header-based library for dense and sparse linear algebra. Due to
1268its popularity and widespread adoption, pybind11 provides transparent
1269conversion support between Eigen and Scientific Python linear algebra data types.
1270
1271Specifically, when including the optional header file :file:`pybind11/eigen.h`,
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001272pybind11 will automatically and transparently convert
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001273
12741. Static and dynamic Eigen dense vectors and matrices to instances of
1275 ``numpy.ndarray`` (and vice versa).
1276
Jason Rhinelanderb68d8fc2016-08-04 16:39:30 -040012772. Returned matrix expressions such as blocks (including columns or rows) and
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001278 diagonals will be converted to ``numpy.ndarray`` of the expression
1279 values.
1280
Jason Rhinelanderb68d8fc2016-08-04 16:39:30 -040012813. Returned matrix-like objects such as Eigen::DiagonalMatrix or
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001282 Eigen::SelfAdjointView will be converted to ``numpy.ndarray`` containing the
1283 expressed value.
1284
Jason Rhinelanderb68d8fc2016-08-04 16:39:30 -040012854. Eigen sparse vectors and matrices to instances of
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001286 ``scipy.sparse.csr_matrix``/``scipy.sparse.csc_matrix`` (and vice versa).
1287
1288This makes it possible to bind most kinds of functions that rely on these types.
1289One major caveat are functions that take Eigen matrices *by reference* and modify
1290them somehow, in which case the information won't be propagated to the caller.
1291
1292.. code-block:: cpp
1293
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001294 /* The Python bindings of these functions won't replicate
1295 the intended effect of modifying the function arguments */
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001296 void scale_by_2(Eigen::Vector3f &v) {
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001297 v *= 2;
1298 }
1299 void scale_by_2(Eigen::Ref<Eigen::MatrixXd> &v) {
1300 v *= 2;
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001301 }
1302
1303To see why this is, refer to the section on :ref:`opaque` (although that
1304section specifically covers STL data types, the underlying issue is the same).
1305The next two sections discuss an efficient alternative for exposing the
1306underlying native Eigen types as opaque objects in a way that still integrates
1307with NumPy and SciPy.
1308
1309.. [#f1] http://eigen.tuxfamily.org
1310
1311.. seealso::
1312
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001313 The file :file:`tests/test_eigen.cpp` contains a complete example that
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001314 shows how to pass Eigen sparse and dense data types in more detail.
1315
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001316Buffer protocol
1317===============
1318
1319Python supports an extremely general and convenient approach for exchanging
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001320data between plugin libraries. Types can expose a buffer view [#f2]_, which
1321provides fast direct access to the raw internal data representation. Suppose we
1322want to bind the following simplistic Matrix class:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001323
1324.. code-block:: cpp
1325
1326 class Matrix {
1327 public:
1328 Matrix(size_t rows, size_t cols) : m_rows(rows), m_cols(cols) {
1329 m_data = new float[rows*cols];
1330 }
1331 float *data() { return m_data; }
1332 size_t rows() const { return m_rows; }
1333 size_t cols() const { return m_cols; }
1334 private:
1335 size_t m_rows, m_cols;
1336 float *m_data;
1337 };
1338
1339The following binding code exposes the ``Matrix`` contents as a buffer object,
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001340making it possible to cast Matrices into NumPy arrays. It is even possible to
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001341completely avoid copy operations with Python expressions like
1342``np.array(matrix_instance, copy = False)``.
1343
1344.. code-block:: cpp
1345
1346 py::class_<Matrix>(m, "Matrix")
1347 .def_buffer([](Matrix &m) -> py::buffer_info {
1348 return py::buffer_info(
Ivan Smirnov5e71e172016-06-26 12:42:34 +01001349 m.data(), /* Pointer to buffer */
1350 sizeof(float), /* Size of one scalar */
1351 py::format_descriptor<float>::format(), /* Python struct-style format descriptor */
1352 2, /* Number of dimensions */
1353 { m.rows(), m.cols() }, /* Buffer dimensions */
1354 { sizeof(float) * m.rows(), /* Strides (in bytes) for each index */
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001355 sizeof(float) }
1356 );
1357 });
1358
1359The snippet above binds a lambda function, which can create ``py::buffer_info``
1360description records on demand describing a given matrix. The contents of
1361``py::buffer_info`` mirror the Python buffer protocol specification.
1362
1363.. code-block:: cpp
1364
1365 struct buffer_info {
1366 void *ptr;
1367 size_t itemsize;
1368 std::string format;
1369 int ndim;
1370 std::vector<size_t> shape;
1371 std::vector<size_t> strides;
1372 };
1373
1374To create a C++ function that can take a Python buffer object as an argument,
1375simply use the type ``py::buffer`` as one of its arguments. Buffers can exist
1376in a great variety of configurations, hence some safety checks are usually
1377necessary in the function body. Below, you can see an basic example on how to
1378define a custom constructor for the Eigen double precision matrix
1379(``Eigen::MatrixXd``) type, which supports initialization from compatible
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001380buffer objects (e.g. a NumPy matrix).
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001381
1382.. code-block:: cpp
1383
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001384 /* Bind MatrixXd (or some other Eigen type) to Python */
1385 typedef Eigen::MatrixXd Matrix;
1386
1387 typedef Matrix::Scalar Scalar;
1388 constexpr bool rowMajor = Matrix::Flags & Eigen::RowMajorBit;
1389
1390 py::class_<Matrix>(m, "Matrix")
1391 .def("__init__", [](Matrix &m, py::buffer b) {
Wenzel Jakobe7628532016-05-05 10:04:44 +02001392 typedef Eigen::Stride<Eigen::Dynamic, Eigen::Dynamic> Strides;
Wenzel Jakobe7628532016-05-05 10:04:44 +02001393
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001394 /* Request a buffer descriptor from Python */
1395 py::buffer_info info = b.request();
1396
1397 /* Some sanity checks ... */
Ivan Smirnov5e71e172016-06-26 12:42:34 +01001398 if (info.format != py::format_descriptor<Scalar>::format())
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001399 throw std::runtime_error("Incompatible format: expected a double array!");
1400
1401 if (info.ndim != 2)
1402 throw std::runtime_error("Incompatible buffer dimension!");
1403
Wenzel Jakobe7628532016-05-05 10:04:44 +02001404 auto strides = Strides(
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001405 info.strides[rowMajor ? 0 : 1] / sizeof(Scalar),
1406 info.strides[rowMajor ? 1 : 0] / sizeof(Scalar));
Wenzel Jakobe7628532016-05-05 10:04:44 +02001407
1408 auto map = Eigen::Map<Matrix, 0, Strides>(
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001409 static_cat<Scalar *>(info.ptr), info.shape[0], info.shape[1], strides);
Wenzel Jakobe7628532016-05-05 10:04:44 +02001410
1411 new (&m) Matrix(map);
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001412 });
1413
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001414For reference, the ``def_buffer()`` call for this Eigen data type should look
1415as follows:
1416
1417.. code-block:: cpp
1418
1419 .def_buffer([](Matrix &m) -> py::buffer_info {
1420 return py::buffer_info(
1421 m.data(), /* Pointer to buffer */
1422 sizeof(Scalar), /* Size of one scalar */
1423 /* Python struct-style format descriptor */
Ivan Smirnov5e71e172016-06-26 12:42:34 +01001424 py::format_descriptor<Scalar>::format(),
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001425 /* Number of dimensions */
1426 2,
1427 /* Buffer dimensions */
1428 { (size_t) m.rows(),
1429 (size_t) m.cols() },
1430 /* Strides (in bytes) for each index */
1431 { sizeof(Scalar) * (rowMajor ? m.cols() : 1),
1432 sizeof(Scalar) * (rowMajor ? 1 : m.rows()) }
1433 );
1434 })
1435
1436For a much easier approach of binding Eigen types (although with some
1437limitations), refer to the section on :ref:`eigen`.
1438
Wenzel Jakob93296692015-10-13 23:21:54 +02001439.. seealso::
1440
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001441 The file :file:`tests/test_buffers.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001442 that demonstrates using the buffer protocol with pybind11 in more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +02001443
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001444.. [#f2] http://docs.python.org/3/c-api/buffer.html
Wenzel Jakob978e3762016-04-07 18:00:41 +02001445
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001446NumPy support
1447=============
1448
1449By exchanging ``py::buffer`` with ``py::array`` in the above snippet, we can
1450restrict the function so that it only accepts NumPy arrays (rather than any
Wenzel Jakob978e3762016-04-07 18:00:41 +02001451type of Python object satisfying the buffer protocol).
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001452
1453In many situations, we want to define a function which only accepts a NumPy
Wenzel Jakob93296692015-10-13 23:21:54 +02001454array of a certain data type. This is possible via the ``py::array_t<T>``
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001455template. For instance, the following function requires the argument to be a
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001456NumPy array containing double precision values.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001457
1458.. code-block:: cpp
1459
Wenzel Jakob93296692015-10-13 23:21:54 +02001460 void f(py::array_t<double> array);
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001461
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001462When it is invoked with a different type (e.g. an integer or a list of
1463integers), the binding code will attempt to cast the input into a NumPy array
1464of the requested type. Note that this feature requires the
1465:file:``pybind11/numpy.h`` header to be included.
1466
1467Data in NumPy arrays is not guaranteed to packed in a dense manner;
1468furthermore, entries can be separated by arbitrary column and row strides.
1469Sometimes, it can be useful to require a function to only accept dense arrays
1470using either the C (row-major) or Fortran (column-major) ordering. This can be
1471accomplished via a second template argument with values ``py::array::c_style``
1472or ``py::array::f_style``.
1473
1474.. code-block:: cpp
1475
Wenzel Jakobb47a9de2016-05-19 16:02:09 +02001476 void f(py::array_t<double, py::array::c_style | py::array::forcecast> array);
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001477
Wenzel Jakobb47a9de2016-05-19 16:02:09 +02001478The ``py::array::forcecast`` argument is the default value of the second
1479template paramenter, and it ensures that non-conforming arguments are converted
1480into an array satisfying the specified requirements instead of trying the next
1481function overload.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001482
Ivan Smirnov223afe32016-07-02 15:33:04 +01001483NumPy structured types
1484======================
1485
1486In order for ``py::array_t`` to work with structured (record) types, we first need
Ivan Smirnov5412a052016-07-02 16:18:42 +01001487to register the memory layout of the type. This can be done via ``PYBIND11_NUMPY_DTYPE``
Ivan Smirnov223afe32016-07-02 15:33:04 +01001488macro which expects the type followed by field names:
1489
1490.. code-block:: cpp
1491
1492 struct A {
1493 int x;
1494 double y;
1495 };
1496
1497 struct B {
1498 int z;
1499 A a;
1500 };
1501
Ivan Smirnov5412a052016-07-02 16:18:42 +01001502 PYBIND11_NUMPY_DTYPE(A, x, y);
1503 PYBIND11_NUMPY_DTYPE(B, z, a);
Ivan Smirnov223afe32016-07-02 15:33:04 +01001504
1505 /* now both A and B can be used as template arguments to py::array_t */
1506
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001507Vectorizing functions
1508=====================
1509
1510Suppose we want to bind a function with the following signature to Python so
1511that it can process arbitrary NumPy array arguments (vectors, matrices, general
1512N-D arrays) in addition to its normal arguments:
1513
1514.. code-block:: cpp
1515
1516 double my_func(int x, float y, double z);
1517
Wenzel Jakob8f4eb002015-10-15 18:13:33 +02001518After including the ``pybind11/numpy.h`` header, this is extremely simple:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001519
1520.. code-block:: cpp
1521
1522 m.def("vectorized_func", py::vectorize(my_func));
1523
1524Invoking the function like below causes 4 calls to be made to ``my_func`` with
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001525each of the array elements. The significant advantage of this compared to
Wenzel Jakob978e3762016-04-07 18:00:41 +02001526solutions like ``numpy.vectorize()`` is that the loop over the elements runs
1527entirely on the C++ side and can be crunched down into a tight, optimized loop
1528by the compiler. The result is returned as a NumPy array of type
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001529``numpy.dtype.float64``.
1530
Wenzel Jakob99279f72016-06-03 11:19:29 +02001531.. code-block:: pycon
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001532
1533 >>> x = np.array([[1, 3],[5, 7]])
1534 >>> y = np.array([[2, 4],[6, 8]])
1535 >>> z = 3
1536 >>> result = vectorized_func(x, y, z)
1537
1538The scalar argument ``z`` is transparently replicated 4 times. The input
1539arrays ``x`` and ``y`` are automatically converted into the right types (they
1540are of type ``numpy.dtype.int64`` but need to be ``numpy.dtype.int32`` and
1541``numpy.dtype.float32``, respectively)
1542
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001543Sometimes we might want to explicitly exclude an argument from the vectorization
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001544because it makes little sense to wrap it in a NumPy array. For instance,
1545suppose the function signature was
1546
1547.. code-block:: cpp
1548
1549 double my_func(int x, float y, my_custom_type *z);
1550
1551This can be done with a stateful Lambda closure:
1552
1553.. code-block:: cpp
1554
1555 // Vectorize a lambda function with a capture object (e.g. to exclude some arguments from the vectorization)
1556 m.def("vectorized_func",
Wenzel Jakob93296692015-10-13 23:21:54 +02001557 [](py::array_t<int> x, py::array_t<float> y, my_custom_type *z) {
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001558 auto stateful_closure = [z](int x, float y) { return my_func(x, y, z); };
1559 return py::vectorize(stateful_closure)(x, y);
1560 }
1561 );
1562
Wenzel Jakob61587162016-01-18 22:38:52 +01001563In cases where the computation is too complicated to be reduced to
1564``vectorize``, it will be necessary to create and access the buffer contents
1565manually. The following snippet contains a complete example that shows how this
1566works (the code is somewhat contrived, since it could have been done more
1567simply using ``vectorize``).
1568
1569.. code-block:: cpp
1570
1571 #include <pybind11/pybind11.h>
1572 #include <pybind11/numpy.h>
1573
1574 namespace py = pybind11;
1575
1576 py::array_t<double> add_arrays(py::array_t<double> input1, py::array_t<double> input2) {
1577 auto buf1 = input1.request(), buf2 = input2.request();
1578
1579 if (buf1.ndim != 1 || buf2.ndim != 1)
1580 throw std::runtime_error("Number of dimensions must be one");
1581
Ivan Smirnovb6518592016-08-13 13:28:56 +01001582 if (buf1.size != buf2.size)
Wenzel Jakob61587162016-01-18 22:38:52 +01001583 throw std::runtime_error("Input shapes must match");
1584
Ivan Smirnovb6518592016-08-13 13:28:56 +01001585 /* No pointer is passed, so NumPy will allocate the buffer */
1586 auto result = py::array_t<double>(buf1.size);
Wenzel Jakob61587162016-01-18 22:38:52 +01001587
1588 auto buf3 = result.request();
1589
1590 double *ptr1 = (double *) buf1.ptr,
1591 *ptr2 = (double *) buf2.ptr,
1592 *ptr3 = (double *) buf3.ptr;
1593
1594 for (size_t idx = 0; idx < buf1.shape[0]; idx++)
1595 ptr3[idx] = ptr1[idx] + ptr2[idx];
1596
1597 return result;
1598 }
1599
1600 PYBIND11_PLUGIN(test) {
1601 py::module m("test");
1602 m.def("add_arrays", &add_arrays, "Add two NumPy arrays");
1603 return m.ptr();
1604 }
1605
Wenzel Jakob93296692015-10-13 23:21:54 +02001606.. seealso::
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001607
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001608 The file :file:`tests/test_numpy_vectorize.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001609 example that demonstrates using :func:`vectorize` in more detail.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001610
Wenzel Jakob93296692015-10-13 23:21:54 +02001611Functions taking Python objects as arguments
1612============================================
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001613
Wenzel Jakob93296692015-10-13 23:21:54 +02001614pybind11 exposes all major Python types using thin C++ wrapper classes. These
1615wrapper classes can also be used as parameters of functions in bindings, which
1616makes it possible to directly work with native Python types on the C++ side.
1617For instance, the following statement iterates over a Python ``dict``:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001618
Wenzel Jakob93296692015-10-13 23:21:54 +02001619.. code-block:: cpp
1620
1621 void print_dict(py::dict dict) {
1622 /* Easily interact with Python types */
1623 for (auto item : dict)
1624 std::cout << "key=" << item.first << ", "
1625 << "value=" << item.second << std::endl;
1626 }
1627
1628Available types include :class:`handle`, :class:`object`, :class:`bool_`,
Wenzel Jakob27e8e102016-01-17 22:36:37 +01001629:class:`int_`, :class:`float_`, :class:`str`, :class:`bytes`, :class:`tuple`,
Wenzel Jakobf64feaf2016-04-28 14:33:45 +02001630:class:`list`, :class:`dict`, :class:`slice`, :class:`none`, :class:`capsule`,
1631:class:`iterable`, :class:`iterator`, :class:`function`, :class:`buffer`,
1632:class:`array`, and :class:`array_t`.
Wenzel Jakob93296692015-10-13 23:21:54 +02001633
Wenzel Jakob436b7312015-10-20 01:04:30 +02001634In this kind of mixed code, it is often necessary to convert arbitrary C++
1635types to Python, which can be done using :func:`cast`:
1636
1637.. code-block:: cpp
1638
1639 MyClass *cls = ..;
1640 py::object obj = py::cast(cls);
1641
1642The reverse direction uses the following syntax:
1643
1644.. code-block:: cpp
1645
1646 py::object obj = ...;
1647 MyClass *cls = obj.cast<MyClass *>();
1648
1649When conversion fails, both directions throw the exception :class:`cast_error`.
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001650It is also possible to call python functions via ``operator()``.
1651
1652.. code-block:: cpp
1653
1654 py::function f = <...>;
1655 py::object result_py = f(1234, "hello", some_instance);
1656 MyClass &result = result_py.cast<MyClass>();
1657
Dean Moldovan625bd482016-09-02 16:40:49 +02001658Keyword arguments are also supported. In Python, there is the usual call syntax:
1659
1660.. code-block:: python
1661
1662 def f(number, say, to):
1663 ... # function code
1664
1665 f(1234, say="hello", to=some_instance) # keyword call in Python
1666
1667In C++, the same call can be made using:
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001668
1669.. code-block:: cpp
1670
Dean Moldovan625bd482016-09-02 16:40:49 +02001671 using pybind11::literals; // to bring in the `_a` literal
1672 f(1234, "say"_a="hello", "to"_a=some_instance); // keyword call in C++
1673
1674Unpacking of ``*args`` and ``**kwargs`` is also possible and can be mixed with
1675other arguments:
1676
1677.. code-block:: cpp
1678
1679 // * unpacking
1680 py::tuple args = py::make_tuple(1234, "hello", some_instance);
1681 f(*args);
1682
1683 // ** unpacking
1684 py::dict kwargs = py::dict("number"_a=1234, "say"_a="hello", "to"_a=some_instance);
1685 f(**kwargs);
1686
1687 // mixed keywords, * and ** unpacking
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001688 py::tuple args = py::make_tuple(1234);
Dean Moldovan625bd482016-09-02 16:40:49 +02001689 py::dict kwargs = py::dict("to"_a=some_instance);
1690 f(*args, "say"_a="hello", **kwargs);
1691
1692Generalized unpacking according to PEP448_ is also supported:
1693
1694.. code-block:: cpp
1695
1696 py::dict kwargs1 = py::dict("number"_a=1234);
1697 py::dict kwargs2 = py::dict("to"_a=some_instance);
1698 f(**kwargs1, "say"_a="hello", **kwargs2);
Wenzel Jakob436b7312015-10-20 01:04:30 +02001699
Wenzel Jakob93296692015-10-13 23:21:54 +02001700.. seealso::
1701
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001702 The file :file:`tests/test_python_types.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001703 example that demonstrates passing native Python types in more detail. The
Dean Moldovan625bd482016-09-02 16:40:49 +02001704 file :file:`tests/test_callbacks.cpp` presents a few examples of calling
1705 Python functions from C++, including keywords arguments and unpacking.
1706
1707.. _PEP448: https://www.python.org/dev/peps/pep-0448/
1708
1709Using Python's print function in C++
1710====================================
1711
1712The usual way to write output in C++ is using ``std::cout`` while in Python one
1713would use ``print``. Since these methods use different buffers, mixing them can
1714lead to output order issues. To resolve this, pybind11 modules can use the
1715:func:`py::print` function which writes to Python's ``sys.stdout`` for consistency.
1716
1717Python's ``print`` function is replicated in the C++ API including optional
1718keyword arguments ``sep``, ``end``, ``file``, ``flush``. Everything works as
1719expected in Python:
1720
1721.. code-block:: cpp
1722
1723 py::print(1, 2.0, "three"); // 1 2.0 three
1724 py::print(1, 2.0, "three", "sep"_a="-"); // 1-2.0-three
1725
1726 auto args = py::make_tuple("unpacked", true);
1727 py::print("->", *args, "end"_a="<-"); // -> unpacked True <-
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001728
1729Default arguments revisited
1730===========================
1731
1732The section on :ref:`default_args` previously discussed basic usage of default
1733arguments using pybind11. One noteworthy aspect of their implementation is that
1734default arguments are converted to Python objects right at declaration time.
1735Consider the following example:
1736
1737.. code-block:: cpp
1738
1739 py::class_<MyClass>("MyClass")
1740 .def("myFunction", py::arg("arg") = SomeType(123));
1741
1742In this case, pybind11 must already be set up to deal with values of the type
1743``SomeType`` (via a prior instantiation of ``py::class_<SomeType>``), or an
1744exception will be thrown.
1745
1746Another aspect worth highlighting is that the "preview" of the default argument
1747in the function signature is generated using the object's ``__repr__`` method.
1748If not available, the signature may not be very helpful, e.g.:
1749
Wenzel Jakob99279f72016-06-03 11:19:29 +02001750.. code-block:: pycon
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001751
1752 FUNCTIONS
1753 ...
1754 | myFunction(...)
Wenzel Jakob48548ea2016-01-17 22:36:44 +01001755 | Signature : (MyClass, arg : SomeType = <SomeType object at 0x101b7b080>) -> NoneType
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001756 ...
1757
1758The first way of addressing this is by defining ``SomeType.__repr__``.
1759Alternatively, it is possible to specify the human-readable preview of the
1760default argument manually using the ``arg_t`` notation:
1761
1762.. code-block:: cpp
1763
1764 py::class_<MyClass>("MyClass")
1765 .def("myFunction", py::arg_t<SomeType>("arg", SomeType(123), "SomeType(123)"));
1766
Wenzel Jakobc769fce2016-03-03 12:03:30 +01001767Sometimes it may be necessary to pass a null pointer value as a default
1768argument. In this case, remember to cast it to the underlying type in question,
1769like so:
1770
1771.. code-block:: cpp
1772
1773 py::class_<MyClass>("MyClass")
1774 .def("myFunction", py::arg("arg") = (SomeType *) nullptr);
1775
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001776Binding functions that accept arbitrary numbers of arguments and keywords arguments
1777===================================================================================
1778
1779Python provides a useful mechanism to define functions that accept arbitrary
1780numbers of arguments and keyword arguments:
1781
1782.. code-block:: cpp
1783
1784 def generic(*args, **kwargs):
1785 # .. do something with args and kwargs
1786
1787Such functions can also be created using pybind11:
1788
1789.. code-block:: cpp
1790
1791 void generic(py::args args, py::kwargs kwargs) {
1792 /// .. do something with args
1793 if (kwargs)
1794 /// .. do something with kwargs
1795 }
1796
1797 /// Binding code
1798 m.def("generic", &generic);
1799
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001800(See ``tests/test_kwargs_and_defaults.cpp``). The class ``py::args``
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001801derives from ``py::list`` and ``py::kwargs`` derives from ``py::dict`` Note
1802that the ``kwargs`` argument is invalid if no keyword arguments were actually
1803provided. Please refer to the other examples for details on how to iterate
1804over these, and on how to cast their entries into C++ objects.
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001805
Wenzel Jakob3764e282016-08-01 23:34:48 +02001806.. warning::
1807
1808 Unlike Python, pybind11 does not allow combining normal parameters with the
1809 ``args`` / ``kwargs`` special parameters.
1810
Wenzel Jakob2dfbade2016-01-17 22:36:37 +01001811Partitioning code over multiple extension modules
1812=================================================
1813
Wenzel Jakob90d2f5e2016-04-11 14:30:11 +02001814It's straightforward to split binding code over multiple extension modules,
1815while referencing types that are declared elsewhere. Everything "just" works
1816without any special precautions. One exception to this rule occurs when
1817extending a type declared in another extension module. Recall the basic example
1818from Section :ref:`inheritance`.
Wenzel Jakob2dfbade2016-01-17 22:36:37 +01001819
1820.. code-block:: cpp
1821
1822 py::class_<Pet> pet(m, "Pet");
1823 pet.def(py::init<const std::string &>())
1824 .def_readwrite("name", &Pet::name);
1825
1826 py::class_<Dog>(m, "Dog", pet /* <- specify parent */)
1827 .def(py::init<const std::string &>())
1828 .def("bark", &Dog::bark);
1829
1830Suppose now that ``Pet`` bindings are defined in a module named ``basic``,
1831whereas the ``Dog`` bindings are defined somewhere else. The challenge is of
1832course that the variable ``pet`` is not available anymore though it is needed
1833to indicate the inheritance relationship to the constructor of ``class_<Dog>``.
1834However, it can be acquired as follows:
1835
1836.. code-block:: cpp
1837
1838 py::object pet = (py::object) py::module::import("basic").attr("Pet");
1839
1840 py::class_<Dog>(m, "Dog", pet)
1841 .def(py::init<const std::string &>())
1842 .def("bark", &Dog::bark);
1843
Jason Rhinelander6b52c832016-09-06 12:27:00 -04001844Alternatively, you can specify the base class as a template parameter option to
1845``class_``, which performs an automated lookup of the corresponding Python
1846type. Like the above code, however, this also requires invoking the ``import``
1847function once to ensure that the pybind11 binding code of the module ``basic``
1848has been executed:
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001849
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001850.. code-block:: cpp
1851
1852 py::module::import("basic");
1853
Jason Rhinelander6b52c832016-09-06 12:27:00 -04001854 py::class_<Dog, Pet>(m, "Dog")
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001855 .def(py::init<const std::string &>())
1856 .def("bark", &Dog::bark);
Wenzel Jakobeda978e2016-03-15 15:05:40 +01001857
Wenzel Jakob978e3762016-04-07 18:00:41 +02001858Naturally, both methods will fail when there are cyclic dependencies.
1859
Wenzel Jakob90d2f5e2016-04-11 14:30:11 +02001860Note that compiling code which has its default symbol visibility set to
1861*hidden* (e.g. via the command line flag ``-fvisibility=hidden`` on GCC/Clang) can interfere with the
1862ability to access types defined in another extension module. Workarounds
1863include changing the global symbol visibility (not recommended, because it will
1864lead unnecessarily large binaries) or manually exporting types that are
1865accessed by multiple extension modules:
1866
1867.. code-block:: cpp
1868
1869 #ifdef _WIN32
1870 # define EXPORT_TYPE __declspec(dllexport)
1871 #else
1872 # define EXPORT_TYPE __attribute__ ((visibility("default")))
1873 #endif
1874
1875 class EXPORT_TYPE Dog : public Animal {
1876 ...
1877 };
1878
1879
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001880Pickling support
1881================
1882
1883Python's ``pickle`` module provides a powerful facility to serialize and
1884de-serialize a Python object graph into a binary data stream. To pickle and
Wenzel Jakob3d0e6ff2016-04-13 11:48:10 +02001885unpickle C++ classes using pybind11, two additional functions must be provided.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001886Suppose the class in question has the following signature:
1887
1888.. code-block:: cpp
1889
1890 class Pickleable {
1891 public:
1892 Pickleable(const std::string &value) : m_value(value) { }
1893 const std::string &value() const { return m_value; }
1894
1895 void setExtra(int extra) { m_extra = extra; }
1896 int extra() const { return m_extra; }
1897 private:
1898 std::string m_value;
1899 int m_extra = 0;
1900 };
1901
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001902The binding code including the requisite ``__setstate__`` and ``__getstate__`` methods [#f3]_
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001903looks as follows:
1904
1905.. code-block:: cpp
1906
1907 py::class_<Pickleable>(m, "Pickleable")
1908 .def(py::init<std::string>())
1909 .def("value", &Pickleable::value)
1910 .def("extra", &Pickleable::extra)
1911 .def("setExtra", &Pickleable::setExtra)
1912 .def("__getstate__", [](const Pickleable &p) {
1913 /* Return a tuple that fully encodes the state of the object */
1914 return py::make_tuple(p.value(), p.extra());
1915 })
1916 .def("__setstate__", [](Pickleable &p, py::tuple t) {
1917 if (t.size() != 2)
1918 throw std::runtime_error("Invalid state!");
1919
Wenzel Jakobd40885a2016-04-13 13:30:05 +02001920 /* Invoke the in-place constructor. Note that this is needed even
1921 when the object just has a trivial default constructor */
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001922 new (&p) Pickleable(t[0].cast<std::string>());
1923
1924 /* Assign any additional state */
1925 p.setExtra(t[1].cast<int>());
1926 });
1927
1928An instance can now be pickled as follows:
1929
1930.. code-block:: python
1931
1932 try:
1933 import cPickle as pickle # Use cPickle on Python 2.7
1934 except ImportError:
1935 import pickle
1936
1937 p = Pickleable("test_value")
1938 p.setExtra(15)
Wenzel Jakob81e09752016-04-30 23:13:03 +02001939 data = pickle.dumps(p, 2)
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001940
Wenzel Jakob81e09752016-04-30 23:13:03 +02001941Note that only the cPickle module is supported on Python 2.7. The second
1942argument to ``dumps`` is also crucial: it selects the pickle protocol version
19432, since the older version 1 is not supported. Newer versions are also fine—for
1944instance, specify ``-1`` to always use the latest available version. Beware:
1945failure to follow these instructions will cause important pybind11 memory
1946allocation routines to be skipped during unpickling, which will likely lead to
1947memory corruption and/or segmentation faults.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001948
1949.. seealso::
1950
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001951 The file :file:`tests/test_pickling.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001952 that demonstrates how to pickle and unpickle types using pybind11 in more
1953 detail.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001954
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001955.. [#f3] http://docs.python.org/3/library/pickle.html#pickling-class-instances
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001956
1957Generating documentation using Sphinx
1958=====================================
1959
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001960Sphinx [#f4]_ has the ability to inspect the signatures and documentation
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001961strings in pybind11-based extension modules to automatically generate beautiful
Wenzel Jakobca8dc082016-06-03 14:24:17 +02001962documentation in a variety formats. The python_example repository [#f5]_ contains a
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001963simple example repository which uses this approach.
1964
1965There are two potential gotchas when using this approach: first, make sure that
1966the resulting strings do not contain any :kbd:`TAB` characters, which break the
1967docstring parsing routines. You may want to use C++11 raw string literals,
1968which are convenient for multi-line comments. Conveniently, any excess
1969indentation will be automatically be removed by Sphinx. However, for this to
1970work, it is important that all lines are indented consistently, i.e.:
1971
1972.. code-block:: cpp
1973
1974 // ok
1975 m.def("foo", &foo, R"mydelimiter(
1976 The foo function
1977
1978 Parameters
1979 ----------
1980 )mydelimiter");
1981
1982 // *not ok*
1983 m.def("foo", &foo, R"mydelimiter(The foo function
1984
1985 Parameters
1986 ----------
1987 )mydelimiter");
1988
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001989.. [#f4] http://www.sphinx-doc.org
Wenzel Jakobca8dc082016-06-03 14:24:17 +02001990.. [#f5] http://github.com/pybind/python_example
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001991
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001992Evaluating Python expressions from strings and files
1993====================================================
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001994
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001995pybind11 provides the :func:`eval` and :func:`eval_file` functions to evaluate
1996Python expressions and statements. The following example illustrates how they
1997can be used.
1998
1999Both functions accept a template parameter that describes how the argument
2000should be interpreted. Possible choices include ``eval_expr`` (isolated
2001expression), ``eval_single_statement`` (a single statement, return value is
2002always ``none``), and ``eval_statements`` (sequence of statements, return value
2003is always ``none``).
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02002004
2005.. code-block:: cpp
2006
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02002007 // At beginning of file
2008 #include <pybind11/eval.h>
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02002009
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02002010 ...
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02002011
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02002012 // Evaluate in scope of main module
2013 py::object scope = py::module::import("__main__").attr("__dict__");
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02002014
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02002015 // Evaluate an isolated expression
2016 int result = py::eval("my_variable + 10", scope).cast<int>();
2017
2018 // Evaluate a sequence of statements
2019 py::eval<py::eval_statements>(
2020 "print('Hello')\n"
2021 "print('world!');",
2022 scope);
2023
2024 // Evaluate the statements in an separate Python file on disk
2025 py::eval_file("script.py", scope);
Wenzel Jakob48ce0722016-09-06 14:13:22 +09002026
2027Development of custom type casters
2028==================================
2029
2030In very rare cases, applications may require custom type casters that cannot be
2031expressed using the abstractions provided by pybind11, thus requiring raw
2032Python C API calls. This is fairly advanced usage and should only be pursued by
2033experts who are familiar with the intricacies of Python reference counting.
2034
2035The following snippets demonstrate how this works for a very simple ``inty``
2036type that that should be convertible from Python types that provide a
2037``__int__(self)`` method.
2038
2039.. code-block:: cpp
2040
2041 struct inty { long long_value; };
2042
2043 void print(inty s) {
2044 std::cout << s.long_value << std::endl;
2045 }
2046
2047The following Python snippet demonstrates the intended usage from the Python side:
2048
2049.. code-block:: python
2050
2051 class A:
2052 def __int__(self):
2053 return 123
2054
2055 from example import print
2056 print(A())
2057
2058To register the necessary conversion routines, it is necessary to add
2059a partial overload to the ``pybind11::detail::type_caster<T>`` template.
2060Although this is an implementation detail, adding partial overloads to this
2061type is explicitly allowed.
2062
2063.. code-block:: cpp
2064
2065 namespace pybind11 {
2066 namespace detail {
2067 template <> struct type_caster<inty> {
2068 public:
2069 /**
2070 * This macro establishes the name 'inty' in
2071 * function signatures and declares a local variable
2072 * 'value' of type inty
2073 */
2074 PYBIND11_TYPE_CASTER(inty, _("inty"));
2075
2076 /**
2077 * Conversion part 1 (Python->C++): convert a PyObject into a inty
2078 * instance or return false upon failure. The second argument
2079 * indicates whether implicit conversions should be applied.
2080 */
2081 bool load(handle src, bool) {
2082 /* Extract PyObject from handle */
2083 PyObject *source = src.ptr();
2084 /* Try converting into a Python integer value */
2085 PyObject *tmp = PyNumber_Long(source);
2086 if (!tmp)
2087 return false;
2088 /* Now try to convert into a C++ int */
2089 value.long_value = PyLong_AsLong(tmp);
2090 Py_DECREF(tmp);
2091 /* Ensure return code was OK (to avoid out-of-range errors etc) */
2092 return !(value.long_value == -1 && !PyErr_Occurred());
2093 }
2094
2095 /**
2096 * Conversion part 2 (C++ -> Python): convert an inty instance into
2097 * a Python object. The second and third arguments are used to
2098 * indicate the return value policy and parent object (for
2099 * ``return_value_policy::reference_internal``) and are generally
2100 * ignored by implicit casters.
2101 */
2102 static handle cast(inty src, return_value_policy /* policy */, handle /* parent */) {
2103 return PyLong_FromLong(src.long_value);
2104 }
2105 };
2106 }
2107 };