blob: 6a4a0207761b0912c8cf3003b86feec6a58dddf8 [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
Wenzel Jakob9bb97c12016-06-03 11:19:41 +0200480.. _macro_notes:
481
482General notes regarding convenience macros
483==========================================
484
485pybind11 provides a few convenience macros such as
486:func:`PYBIND11_MAKE_OPAQUE` and :func:`PYBIND11_DECLARE_HOLDER_TYPE`, and
487``PYBIND11_OVERLOAD_*``. Since these are "just" macros that are evaluated
488in the preprocessor (which has no concept of types), they *will* get confused
489by commas in a template argument such as ``PYBIND11_OVERLOAD(MyReturnValue<T1,
490T2>, myFunc)``. In this case, the preprocessor assumes that the comma indicates
491the beginnning of the next parameter. Use a ``typedef`` to bind the template to
492another name and use it in the macro to avoid this problem.
493
494
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100495Global Interpreter Lock (GIL)
496=============================
497
498The classes :class:`gil_scoped_release` and :class:`gil_scoped_acquire` can be
499used to acquire and release the global interpreter lock in the body of a C++
500function call. In this way, long-running C++ code can be parallelized using
501multiple Python threads. Taking the previous section as an example, this could
502be realized as follows (important changes highlighted):
503
504.. code-block:: cpp
505 :emphasize-lines: 8,9,33,34
506
507 class PyAnimal : public Animal {
508 public:
509 /* Inherit the constructors */
510 using Animal::Animal;
511
512 /* Trampoline (need one for each virtual function) */
513 std::string go(int n_times) {
514 /* Acquire GIL before calling Python code */
Wenzel Jakoba4caa852015-12-14 12:39:02 +0100515 py::gil_scoped_acquire acquire;
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100516
517 PYBIND11_OVERLOAD_PURE(
518 std::string, /* Return type */
519 Animal, /* Parent class */
520 go, /* Name of function */
521 n_times /* Argument(s) */
522 );
523 }
524 };
525
526 PYBIND11_PLUGIN(example) {
527 py::module m("example", "pybind11 example plugin");
528
Jason Rhinelander5fffe202016-09-06 12:17:06 -0400529 py::class_<Animal, PyAnimal> animal(m, "Animal");
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100530 animal
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100531 .def(py::init<>())
532 .def("go", &Animal::go);
533
534 py::class_<Dog>(m, "Dog", animal)
535 .def(py::init<>());
536
537 m.def("call_go", [](Animal *animal) -> std::string {
538 /* Release GIL before calling into (potentially long-running) C++ code */
Wenzel Jakoba4caa852015-12-14 12:39:02 +0100539 py::gil_scoped_release release;
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100540 return call_go(animal);
541 });
542
543 return m.ptr();
544 }
545
Wenzel Jakob93296692015-10-13 23:21:54 +0200546Passing STL data structures
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200547===========================
548
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200549When including the additional header file :file:`pybind11/stl.h`, conversions
Wenzel Jakob978e3762016-04-07 18:00:41 +0200550between ``std::vector<>``, ``std::list<>``, ``std::set<>``, and ``std::map<>``
551and the Python ``list``, ``set`` and ``dict`` data structures are automatically
552enabled. The types ``std::pair<>`` and ``std::tuple<>`` are already supported
553out of the box with just the core :file:`pybind11/pybind11.h` header.
Wenzel Jakob93296692015-10-13 23:21:54 +0200554
Wenzel Jakobfe342412016-09-06 13:02:29 +0900555The major downside of these implicit conversions is that containers must be
556converted (i.e. copied) on every Python->C++ and C++->Python transition, which
557can have implications on the program semantics and performance. Please read the
558next sections for more details and alternative approaches that avoid this.
Sergey Lyskov75204182016-08-29 22:50:38 -0400559
Wenzel Jakob93296692015-10-13 23:21:54 +0200560.. note::
561
Wenzel Jakobfe342412016-09-06 13:02:29 +0900562 Arbitrary nesting of any of these types is possible.
Wenzel Jakob93296692015-10-13 23:21:54 +0200563
564.. seealso::
565
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200566 The file :file:`tests/test_python_types.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400567 example that demonstrates how to pass STL data types in more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +0200568
Wenzel Jakobfe342412016-09-06 13:02:29 +0900569.. _opaque:
570
571Treating STL data structures as opaque objects
572==============================================
573
574pybind11 heavily relies on a template matching mechanism to convert parameters
575and return values that are constructed from STL data types such as vectors,
576linked lists, hash tables, etc. This even works in a recursive manner, for
577instance to deal with lists of hash maps of pairs of elementary and custom
578types, etc.
579
580However, a fundamental limitation of this approach is that internal conversions
581between Python and C++ types involve a copy operation that prevents
582pass-by-reference semantics. What does this mean?
583
584Suppose we bind the following function
585
586.. code-block:: cpp
587
588 void append_1(std::vector<int> &v) {
589 v.push_back(1);
590 }
591
592and call it from Python, the following happens:
593
594.. code-block:: pycon
595
596 >>> v = [5, 6]
597 >>> append_1(v)
598 >>> print(v)
599 [5, 6]
600
601As you can see, when passing STL data structures by reference, modifications
602are not propagated back the Python side. A similar situation arises when
603exposing STL data structures using the ``def_readwrite`` or ``def_readonly``
604functions:
605
606.. code-block:: cpp
607
608 /* ... definition ... */
609
610 class MyClass {
611 std::vector<int> contents;
612 };
613
614 /* ... binding code ... */
615
616 py::class_<MyClass>(m, "MyClass")
617 .def(py::init<>)
618 .def_readwrite("contents", &MyClass::contents);
619
620In this case, properties can be read and written in their entirety. However, an
621``append`` operaton involving such a list type has no effect:
622
623.. code-block:: pycon
624
625 >>> m = MyClass()
626 >>> m.contents = [5, 6]
627 >>> print(m.contents)
628 [5, 6]
629 >>> m.contents.append(7)
630 >>> print(m.contents)
631 [5, 6]
632
633Finally, the involved copy operations can be costly when dealing with very
634large lists. To deal with all of the above situations, pybind11 provides a
635macro named ``PYBIND11_MAKE_OPAQUE(T)`` that disables the template-based
636conversion machinery of types, thus rendering them *opaque*. The contents of
637opaque objects are never inspected or extracted, hence they *can* be passed by
638reference. For instance, to turn ``std::vector<int>`` into an opaque type, add
639the declaration
640
641.. code-block:: cpp
642
643 PYBIND11_MAKE_OPAQUE(std::vector<int>);
644
645before any binding code (e.g. invocations to ``class_::def()``, etc.). This
646macro must be specified at the top level (and outside of any namespaces), since
647it instantiates a partial template overload. If your binding code consists of
648multiple compilation units, it must be present in every file preceding any
649usage of ``std::vector<int>``. Opaque types must also have a corresponding
650``class_`` declaration to associate them with a name in Python, and to define a
651set of available operations, e.g.:
652
653.. code-block:: cpp
654
655 py::class_<std::vector<int>>(m, "IntVector")
656 .def(py::init<>())
657 .def("clear", &std::vector<int>::clear)
658 .def("pop_back", &std::vector<int>::pop_back)
659 .def("__len__", [](const std::vector<int> &v) { return v.size(); })
660 .def("__iter__", [](std::vector<int> &v) {
661 return py::make_iterator(v.begin(), v.end());
662 }, py::keep_alive<0, 1>()) /* Keep vector alive while iterator is used */
663 // ....
664
665The ability to expose STL containers as native Python objects is a fairly
666common request, hence pybind11 also provides an optional header file named
667:file:`pybind11/stl_bind.h` that does exactly this. The mapped containers try
668to match the behavior of their native Python counterparts as much as possible.
669
670The following example showcases usage of :file:`pybind11/stl_bind.h`:
671
672.. code-block:: cpp
673
674 // Don't forget this
675 #include <pybind11/stl_bind.h>
676
677 PYBIND11_MAKE_OPAQUE(std::vector<int>);
678 PYBIND11_MAKE_OPAQUE(std::map<std::string, double>);
679
680 // ...
681
682 // later in binding code:
683 py::bind_vector<std::vector<int>>(m, "VectorInt");
684 py::bind_map<std::map<std::string, double>>(m, "MapStringDouble");
685
686Please take a look at the :ref:`macro_notes` before using the
687``PYBIND11_MAKE_OPAQUE`` macro.
688
689.. seealso::
690
691 The file :file:`tests/test_opaque_types.cpp` contains a complete
692 example that demonstrates how to create and expose opaque types using
693 pybind11 in more detail.
694
695 The file :file:`tests/test_stl_binders.cpp` shows how to use the
696 convenience STL container wrappers.
697
698
Wenzel Jakobb2825952016-04-13 23:33:00 +0200699Binding sequence data types, iterators, the slicing protocol, etc.
700==================================================================
Wenzel Jakob93296692015-10-13 23:21:54 +0200701
702Please refer to the supplemental example for details.
703
704.. seealso::
705
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200706 The file :file:`tests/test_sequences_and_iterators.cpp` contains a
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400707 complete example that shows how to bind a sequence data type, including
708 length queries (``__len__``), iterators (``__iter__``), the slicing
709 protocol and other kinds of useful operations.
Wenzel Jakob93296692015-10-13 23:21:54 +0200710
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200711Return value policies
712=====================
713
Wenzel Jakob93296692015-10-13 23:21:54 +0200714Python and C++ use wildly different ways of managing the memory and lifetime of
715objects managed by them. This can lead to issues when creating bindings for
716functions that return a non-trivial type. Just by looking at the type
717information, it is not clear whether Python should take charge of the returned
718value and eventually free its resources, or if this is handled on the C++ side.
719For this reason, pybind11 provides a several `return value policy` annotations
720that can be passed to the :func:`module::def` and :func:`class_::def`
Wenzel Jakob61d67f02015-12-14 12:53:06 +0100721functions. The default policy is :enum:`return_value_policy::automatic`.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200722
Wenzel Jakobbf099582016-08-22 12:52:02 +0200723Return value policies can also be applied to properties, in which case the
724arguments must be passed through the :class:`cpp_function` constructor:
725
726.. code-block:: cpp
727
728 class_<MyClass>(m, "MyClass")
729 def_property("data"
730 py::cpp_function(&MyClass::getData, py::return_value_policy::copy),
731 py::cpp_function(&MyClass::setData)
732 );
733
734The following table provides an overview of the available return value policies:
735
Wenzel Jakobf64feaf2016-04-28 14:33:45 +0200736.. tabularcolumns:: |p{0.5\textwidth}|p{0.45\textwidth}|
737
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200738+--------------------------------------------------+----------------------------------------------------------------------------+
739| Return value policy | Description |
740+==================================================+============================================================================+
741| :enum:`return_value_policy::automatic` | This is the default return value policy, which falls back to the policy |
742| | :enum:`return_value_policy::take_ownership` when the return value is a |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200743| | pointer. Otherwise, it uses :enum:`return_value::move` or |
744| | :enum:`return_value::copy` for rvalue and lvalue references, respectively. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200745| | See below for a description of what all of these different policies do. |
746+--------------------------------------------------+----------------------------------------------------------------------------+
747| :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 +0200748| | return value is a pointer. This is the default conversion policy for |
749| | function arguments when calling Python functions manually from C++ code |
750| | (i.e. via handle::operator()). You probably won't need to use this. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200751+--------------------------------------------------+----------------------------------------------------------------------------+
752| :enum:`return_value_policy::take_ownership` | Reference an existing object (i.e. do not create a new copy) and take |
753| | ownership. Python will call the destructor and delete operator when the |
754| | object's reference count reaches zero. Undefined behavior ensues when the |
Wenzel Jakobf53e3002016-06-30 14:59:23 +0200755| | C++ side does the same. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200756+--------------------------------------------------+----------------------------------------------------------------------------+
757| :enum:`return_value_policy::copy` | Create a new copy of the returned object, which will be owned by Python. |
758| | This policy is comparably safe because the lifetimes of the two instances |
759| | are decoupled. |
760+--------------------------------------------------+----------------------------------------------------------------------------+
761| :enum:`return_value_policy::move` | Use ``std::move`` to move the return value contents into a new instance |
762| | that will be owned by Python. This policy is comparably safe because the |
763| | lifetimes of the two instances (move source and destination) are decoupled.|
764+--------------------------------------------------+----------------------------------------------------------------------------+
765| :enum:`return_value_policy::reference` | Reference an existing object, but do not take ownership. The C++ side is |
766| | responsible for managing the object's lifetime and deallocating it when |
767| | it is no longer used. Warning: undefined behavior will ensue when the C++ |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200768| | side deletes an object that is still referenced and used by Python. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200769+--------------------------------------------------+----------------------------------------------------------------------------+
Wenzel Jakobbf099582016-08-22 12:52:02 +0200770| :enum:`return_value_policy::reference_internal` | Indicates that the lifetime of the return value is tied to the lifetime |
771| | of a parent object, namely the implicit ``this``, or ``self`` argument of |
772| | the called method or property. Internally, this policy works just like |
773| | :enum:`return_value_policy::reference` but additionally applies a |
774| | ``keep_alive<0, 1>`` *call policy* (described in the next section) that |
775| | prevents the parent object from being garbage collected as long as the |
776| | return value is referenced by Python. This is the default policy for |
777| | property getters created via ``def_property``, ``def_readwrite``, etc.) |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200778+--------------------------------------------------+----------------------------------------------------------------------------+
Wenzel Jakob93296692015-10-13 23:21:54 +0200779
Wenzel Jakobfb6aed22016-07-18 20:29:53 +0200780.. warning::
781
Jason Rhinelanderefc2aa72016-08-10 11:38:33 -0400782 Code with invalid return value policies might access unitialized memory or
783 free data structures multiple times, which can lead to hard-to-debug
Wenzel Jakobfb6aed22016-07-18 20:29:53 +0200784 non-determinism and segmentation faults, hence it is worth spending the
785 time to understand all the different options in the table above.
786
Jason Rhinelanderefc2aa72016-08-10 11:38:33 -0400787One important aspect of the above policies is that they only apply to instances
788which pybind11 has *not* seen before, in which case the policy clarifies
789essential questions about the return value's lifetime and ownership. When
790pybind11 knows the instance already (as identified by its type and address in
Wenzel Jakobfb6aed22016-07-18 20:29:53 +0200791memory), it will return the existing Python object wrapper rather than creating
Wenzel Jakobbf099582016-08-22 12:52:02 +0200792a new copy.
nafur717df752016-06-28 18:07:11 +0200793
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200794.. note::
795
796 The next section on :ref:`call_policies` discusses *call policies* that can be
797 specified *in addition* to a return value policy from the list above. Call
798 policies indicate reference relationships that can involve both return values
799 and parameters of functions.
800
801.. note::
802
803 As an alternative to elaborate call policies and lifetime management logic,
804 consider using smart pointers (see the section on :ref:`smart_pointers` for
805 details). Smart pointers can tell whether an object is still referenced from
806 C++ or Python, which generally eliminates the kinds of inconsistencies that
807 can lead to crashes or undefined behavior. For functions returning smart
808 pointers, it is not necessary to specify a return value policy.
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100809
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200810.. _call_policies:
811
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100812Additional call policies
813========================
814
815In addition to the above return value policies, further `call policies` can be
816specified to indicate dependencies between parameters. There is currently just
817one policy named ``keep_alive<Nurse, Patient>``, which indicates that the
818argument with index ``Patient`` should be kept alive at least until the
Wenzel Jakob0b632312016-08-18 10:58:21 +0200819argument with index ``Nurse`` is freed by the garbage collector. Argument
820indices start at one, while zero refers to the return value. For methods, index
821``1`` refers to the implicit ``this`` pointer, while regular arguments begin at
822index ``2``. Arbitrarily many call policies can be specified. When a ``Nurse``
823with value ``None`` is detected at runtime, the call policy does nothing.
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100824
Wenzel Jakob0b632312016-08-18 10:58:21 +0200825This feature internally relies on the ability to create a *weak reference* to
826the nurse object, which is permitted by all classes exposed via pybind11. When
827the nurse object does not support weak references, an exception will be thrown.
828
829Consider the following example: here, the binding code for a list append
830operation ties the lifetime of the newly added element to the underlying
831container:
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100832
833.. code-block:: cpp
834
835 py::class_<List>(m, "List")
836 .def("append", &List::append, py::keep_alive<1, 2>());
837
838.. note::
839
840 ``keep_alive`` is analogous to the ``with_custodian_and_ward`` (if Nurse,
841 Patient != 0) and ``with_custodian_and_ward_postcall`` (if Nurse/Patient ==
842 0) policies from Boost.Python.
843
Wenzel Jakob61587162016-01-18 22:38:52 +0100844.. seealso::
845
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200846 The file :file:`tests/test_keep_alive.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400847 that demonstrates using :class:`keep_alive` in more detail.
Wenzel Jakob61587162016-01-18 22:38:52 +0100848
Wenzel Jakob93296692015-10-13 23:21:54 +0200849Implicit type conversions
850=========================
851
852Suppose that instances of two types ``A`` and ``B`` are used in a project, and
Wenzel Jakob8e93df82016-05-01 02:36:58 +0200853that an ``A`` can easily be converted into an instance of type ``B`` (examples of this
Wenzel Jakob93296692015-10-13 23:21:54 +0200854could be a fixed and an arbitrary precision number type).
855
856.. code-block:: cpp
857
858 py::class_<A>(m, "A")
859 /// ... members ...
860
861 py::class_<B>(m, "B")
862 .def(py::init<A>())
863 /// ... members ...
864
865 m.def("func",
866 [](const B &) { /* .... */ }
867 );
868
869To invoke the function ``func`` using a variable ``a`` containing an ``A``
870instance, we'd have to write ``func(B(a))`` in Python. On the other hand, C++
871will automatically apply an implicit type conversion, which makes it possible
872to directly write ``func(a)``.
873
874In this situation (i.e. where ``B`` has a constructor that converts from
875``A``), the following statement enables similar implicit conversions on the
876Python side:
877
878.. code-block:: cpp
879
880 py::implicitly_convertible<A, B>();
881
Wenzel Jakob3eeea6f2016-06-30 18:10:28 +0200882.. note::
883
884 Implicit conversions from ``A`` to ``B`` only work when ``B`` is a custom
885 data type that is exposed to Python via pybind11.
886
Wenzel Jakobf88af0c2016-06-22 13:52:31 +0200887.. _static_properties:
888
889Static properties
890=================
891
892The section on :ref:`properties` discussed the creation of instance properties
893that are implemented in terms of C++ getters and setters.
894
895Static properties can also be created in a similar way to expose getters and
896setters of static class attributes. It is important to note that the implicit
897``self`` argument also exists in this case and is used to pass the Python
898``type`` subclass instance. This parameter will often not be needed by the C++
899side, and the following example illustrates how to instantiate a lambda getter
900function that ignores it:
901
902.. code-block:: cpp
903
904 py::class_<Foo>(m, "Foo")
905 .def_property_readonly_static("foo", [](py::object /* self */) { return Foo(); });
906
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200907Unique pointers
908===============
909
910Given a class ``Example`` with Python bindings, it's possible to return
911instances wrapped in C++11 unique pointers, like so
912
913.. code-block:: cpp
914
915 std::unique_ptr<Example> create_example() { return std::unique_ptr<Example>(new Example()); }
916
917.. code-block:: cpp
918
919 m.def("create_example", &create_example);
920
921In other words, there is nothing special that needs to be done. While returning
922unique pointers in this way is allowed, it is *illegal* to use them as function
923arguments. For instance, the following function signature cannot be processed
924by pybind11.
925
926.. code-block:: cpp
927
928 void do_something_with_example(std::unique_ptr<Example> ex) { ... }
929
930The above signature would imply that Python needs to give up ownership of an
931object that is passed to this function, which is generally not possible (for
932instance, the object might be referenced elsewhere).
933
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200934.. _smart_pointers:
935
Wenzel Jakob93296692015-10-13 23:21:54 +0200936Smart pointers
937==============
938
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200939This section explains how to pass values that are wrapped in "smart" pointer
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200940types with internal reference counting. For the simpler C++11 unique pointers,
941refer to the previous section.
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200942
Jason Rhinelander5fffe202016-09-06 12:17:06 -0400943The binding generator for classes, :class:`class_`, can be passed a template
944type that denotes a special *holder* type that is used to manage references to
945the object. If no such holder type template argument is given, the default for
946a type named ``Type`` is ``std::unique_ptr<Type>``, which means that the object
947is deallocated when Python's reference count goes to zero.
Wenzel Jakob93296692015-10-13 23:21:54 +0200948
Wenzel Jakob1853b652015-10-18 15:38:50 +0200949It is possible to switch to other types of reference counting wrappers or smart
950pointers, which is useful in codebases that rely on them. For instance, the
951following snippet causes ``std::shared_ptr`` to be used instead.
Wenzel Jakob93296692015-10-13 23:21:54 +0200952
953.. code-block:: cpp
954
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100955 py::class_<Example, std::shared_ptr<Example> /* <- holder type */> obj(m, "Example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100956
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100957Note that any particular class can only be associated with a single holder type.
Wenzel Jakob93296692015-10-13 23:21:54 +0200958
Wenzel Jakob1853b652015-10-18 15:38:50 +0200959To enable transparent conversions for functions that take shared pointers as an
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100960argument or that return them, a macro invocation similar to the following must
Wenzel Jakob1853b652015-10-18 15:38:50 +0200961be declared at the top level before any binding code:
962
963.. code-block:: cpp
964
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200965 PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr<T>);
Wenzel Jakob1853b652015-10-18 15:38:50 +0200966
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100967.. note::
Wenzel Jakob61d67f02015-12-14 12:53:06 +0100968
969 The first argument of :func:`PYBIND11_DECLARE_HOLDER_TYPE` should be a
970 placeholder name that is used as a template parameter of the second
971 argument. Thus, feel free to use any identifier, but use it consistently on
972 both sides; also, don't use the name of a type that already exists in your
973 codebase.
974
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100975One potential stumbling block when using holder types is that they need to be
976applied consistently. Can you guess what's broken about the following binding
977code?
Wenzel Jakob6e213c92015-11-24 23:05:58 +0100978
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100979.. code-block:: cpp
Wenzel Jakob6e213c92015-11-24 23:05:58 +0100980
Jason Rhinelander5fffe202016-09-06 12:17:06 -0400981 PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr<T>);
982
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100983 class Child { };
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100984
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100985 class Parent {
986 public:
987 Parent() : child(std::make_shared<Child>()) { }
988 Child *get_child() { return child.get(); } /* Hint: ** DON'T DO THIS ** */
989 private:
990 std::shared_ptr<Child> child;
991 };
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100992
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100993 PYBIND11_PLUGIN(example) {
994 py::module m("example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100995
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100996 py::class_<Child, std::shared_ptr<Child>>(m, "Child");
997
998 py::class_<Parent, std::shared_ptr<Parent>>(m, "Parent")
999 .def(py::init<>())
1000 .def("get_child", &Parent::get_child);
1001
1002 return m.ptr();
1003 }
1004
1005The following Python code will cause undefined behavior (and likely a
1006segmentation fault).
1007
1008.. code-block:: python
1009
1010 from example import Parent
1011 print(Parent().get_child())
1012
1013The problem is that ``Parent::get_child()`` returns a pointer to an instance of
1014``Child``, but the fact that this instance is already managed by
1015``std::shared_ptr<...>`` is lost when passing raw pointers. In this case,
1016pybind11 will create a second independent ``std::shared_ptr<...>`` that also
1017claims ownership of the pointer. In the end, the object will be freed **twice**
1018since these shared pointers have no way of knowing about each other.
1019
1020There are two ways to resolve this issue:
1021
10221. For types that are managed by a smart pointer class, never use raw pointers
1023 in function arguments or return values. In other words: always consistently
1024 wrap pointers into their designated holder types (such as
1025 ``std::shared_ptr<...>``). In this case, the signature of ``get_child()``
1026 should be modified as follows:
1027
1028.. code-block:: cpp
1029
1030 std::shared_ptr<Child> get_child() { return child; }
1031
10322. Adjust the definition of ``Child`` by specifying
1033 ``std::enable_shared_from_this<T>`` (see cppreference_ for details) as a
1034 base class. This adds a small bit of information to ``Child`` that allows
1035 pybind11 to realize that there is already an existing
1036 ``std::shared_ptr<...>`` and communicate with it. In this case, the
1037 declaration of ``Child`` should look as follows:
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001038
Wenzel Jakob6e213c92015-11-24 23:05:58 +01001039.. _cppreference: http://en.cppreference.com/w/cpp/memory/enable_shared_from_this
1040
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001041.. code-block:: cpp
1042
1043 class Child : public std::enable_shared_from_this<Child> { };
1044
Wenzel Jakob9bb97c12016-06-03 11:19:41 +02001045
1046Please take a look at the :ref:`macro_notes` before using this feature.
1047
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001048.. seealso::
1049
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001050 The file :file:`tests/test_smart_ptr.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001051 that demonstrates how to work with custom reference-counting holder types
1052 in more detail.
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001053
Wenzel Jakob93296692015-10-13 23:21:54 +02001054.. _custom_constructors:
1055
1056Custom constructors
1057===================
1058
1059The syntax for binding constructors was previously introduced, but it only
1060works when a constructor with the given parameters actually exists on the C++
1061side. To extend this to more general cases, let's take a look at what actually
1062happens under the hood: the following statement
1063
1064.. code-block:: cpp
1065
1066 py::class_<Example>(m, "Example")
1067 .def(py::init<int>());
1068
1069is short hand notation for
1070
1071.. code-block:: cpp
1072
1073 py::class_<Example>(m, "Example")
1074 .def("__init__",
1075 [](Example &instance, int arg) {
1076 new (&instance) Example(arg);
1077 }
1078 );
1079
1080In other words, :func:`init` creates an anonymous function that invokes an
1081in-place constructor. Memory allocation etc. is already take care of beforehand
1082within pybind11.
1083
Nickolai Belakovski63338252016-08-27 11:57:55 -07001084.. _classes_with_non_public_destructors:
1085
1086Classes with non-public destructors
1087===================================
1088
Wenzel Jakob5e4e4772016-08-28 02:03:15 +02001089If a class has a private or protected destructor (as might e.g. be the case in
1090a singleton pattern), a compile error will occur when creating bindings via
1091pybind11. The underlying issue is that the ``std::unique_ptr`` holder type that
1092is responsible for managing the lifetime of instances will reference the
1093destructor even if no deallocations ever take place. In order to expose classes
1094with private or protected destructors, it is possible to override the holder
Jason Rhinelander5fffe202016-09-06 12:17:06 -04001095type via a holder type argument to ``class_``. Pybind11 provides a helper class
Wenzel Jakob5e4e4772016-08-28 02:03:15 +02001096``py::nodelete`` that disables any destructor invocations. In this case, it is
1097crucial that instances are deallocated on the C++ side to avoid memory leaks.
Nickolai Belakovski63338252016-08-27 11:57:55 -07001098
1099.. code-block:: cpp
1100
1101 /* ... definition ... */
1102
1103 class MyClass {
Wenzel Jakob5e4e4772016-08-28 02:03:15 +02001104 private:
1105 ~MyClass() { }
Nickolai Belakovski63338252016-08-27 11:57:55 -07001106 };
1107
1108 /* ... binding code ... */
1109
Wenzel Jakob5e4e4772016-08-28 02:03:15 +02001110 py::class_<MyClass, std::unique_ptr<MyClass, py::nodelete>>(m, "MyClass")
Nickolai Belakovski63338252016-08-27 11:57:55 -07001111 .def(py::init<>)
1112
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001113.. _catching_and_throwing_exceptions:
1114
Wenzel Jakob93296692015-10-13 23:21:54 +02001115Catching and throwing exceptions
1116================================
1117
1118When C++ code invoked from Python throws an ``std::exception``, it is
1119automatically converted into a Python ``Exception``. pybind11 defines multiple
1120special exception classes that will map to different types of Python
1121exceptions:
1122
Wenzel Jakobf64feaf2016-04-28 14:33:45 +02001123.. tabularcolumns:: |p{0.5\textwidth}|p{0.45\textwidth}|
1124
Wenzel Jakob978e3762016-04-07 18:00:41 +02001125+--------------------------------------+------------------------------+
1126| C++ exception type | Python exception type |
1127+======================================+==============================+
1128| :class:`std::exception` | ``RuntimeError`` |
1129+--------------------------------------+------------------------------+
1130| :class:`std::bad_alloc` | ``MemoryError`` |
1131+--------------------------------------+------------------------------+
1132| :class:`std::domain_error` | ``ValueError`` |
1133+--------------------------------------+------------------------------+
1134| :class:`std::invalid_argument` | ``ValueError`` |
1135+--------------------------------------+------------------------------+
1136| :class:`std::length_error` | ``ValueError`` |
1137+--------------------------------------+------------------------------+
1138| :class:`std::out_of_range` | ``ValueError`` |
1139+--------------------------------------+------------------------------+
1140| :class:`std::range_error` | ``ValueError`` |
1141+--------------------------------------+------------------------------+
1142| :class:`pybind11::stop_iteration` | ``StopIteration`` (used to |
1143| | implement custom iterators) |
1144+--------------------------------------+------------------------------+
1145| :class:`pybind11::index_error` | ``IndexError`` (used to |
1146| | indicate out of bounds |
1147| | accesses in ``__getitem__``, |
1148| | ``__setitem__``, etc.) |
1149+--------------------------------------+------------------------------+
Sergey Lyskova95bde12016-05-08 19:31:55 -04001150| :class:`pybind11::value_error` | ``ValueError`` (used to |
1151| | indicate wrong value passed |
1152| | in ``container.remove(...)`` |
1153+--------------------------------------+------------------------------+
Jason Rhinelander5aa85be2016-08-11 21:22:05 -04001154| :class:`pybind11::key_error` | ``KeyError`` (used to |
1155| | indicate out of bounds |
1156| | accesses in ``__getitem__``, |
1157| | ``__setitem__`` in dict-like |
1158| | objects, etc.) |
1159+--------------------------------------+------------------------------+
Wenzel Jakob978e3762016-04-07 18:00:41 +02001160| :class:`pybind11::error_already_set` | Indicates that the Python |
1161| | exception flag has already |
1162| | been initialized |
1163+--------------------------------------+------------------------------+
Wenzel Jakob93296692015-10-13 23:21:54 +02001164
1165When a Python function invoked from C++ throws an exception, it is converted
1166into a C++ exception of type :class:`error_already_set` whose string payload
1167contains a textual summary.
1168
1169There is also a special exception :class:`cast_error` that is thrown by
1170:func:`handle::call` when the input arguments cannot be converted to Python
1171objects.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001172
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001173Registering custom exception translators
1174========================================
1175
1176If the default exception conversion policy described
1177:ref:`above <catching_and_throwing_exceptions>`
1178is insufficient, pybind11 also provides support for registering custom
1179exception translators.
1180
1181The function ``register_exception_translator(translator)`` takes a stateless
1182callable (e.g. a function pointer or a lambda function without captured
1183variables) with the following call signature: ``void(std::exception_ptr)``.
1184
1185When a C++ exception is thrown, registered exception translators are tried
1186in reverse order of registration (i.e. the last registered translator gets
1187a first shot at handling the exception).
1188
1189Inside the translator, ``std::rethrow_exception`` should be used within
1190a try block to re-throw the exception. A catch clause can then use
1191``PyErr_SetString`` to set a Python exception as demonstrated
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001192in :file:`tests/test_exceptions.cpp`.
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001193
1194This example also demonstrates how to create custom exception types
1195with ``py::exception``.
1196
1197The following example demonstrates this for a hypothetical exception class
1198``MyCustomException``:
1199
1200.. code-block:: cpp
1201
1202 py::register_exception_translator([](std::exception_ptr p) {
1203 try {
1204 if (p) std::rethrow_exception(p);
1205 } catch (const MyCustomException &e) {
1206 PyErr_SetString(PyExc_RuntimeError, e.what());
1207 }
1208 });
1209
1210Multiple exceptions can be handled by a single translator. If the exception is
1211not caught by the current translator, the previously registered one gets a
1212chance.
1213
1214If none of the registered exception translators is able to handle the
1215exception, it is handled by the default converter as described in the previous
1216section.
1217
1218.. note::
1219
1220 You must either call ``PyErr_SetString`` for every exception caught in a
1221 custom exception translator. Failure to do so will cause Python to crash
1222 with ``SystemError: error return without exception set``.
1223
1224 Exceptions that you do not plan to handle should simply not be caught.
1225
1226 You may also choose to explicity (re-)throw the exception to delegate it to
1227 the other existing exception translators.
1228
1229 The ``py::exception`` wrapper for creating custom exceptions cannot (yet)
1230 be used as a ``py::base``.
1231
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001232.. _eigen:
1233
1234Transparent conversion of dense and sparse Eigen data types
1235===========================================================
1236
1237Eigen [#f1]_ is C++ header-based library for dense and sparse linear algebra. Due to
1238its popularity and widespread adoption, pybind11 provides transparent
1239conversion support between Eigen and Scientific Python linear algebra data types.
1240
1241Specifically, when including the optional header file :file:`pybind11/eigen.h`,
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001242pybind11 will automatically and transparently convert
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001243
12441. Static and dynamic Eigen dense vectors and matrices to instances of
1245 ``numpy.ndarray`` (and vice versa).
1246
Jason Rhinelanderb68d8fc2016-08-04 16:39:30 -040012472. Returned matrix expressions such as blocks (including columns or rows) and
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001248 diagonals will be converted to ``numpy.ndarray`` of the expression
1249 values.
1250
Jason Rhinelanderb68d8fc2016-08-04 16:39:30 -040012513. Returned matrix-like objects such as Eigen::DiagonalMatrix or
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001252 Eigen::SelfAdjointView will be converted to ``numpy.ndarray`` containing the
1253 expressed value.
1254
Jason Rhinelanderb68d8fc2016-08-04 16:39:30 -040012554. Eigen sparse vectors and matrices to instances of
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001256 ``scipy.sparse.csr_matrix``/``scipy.sparse.csc_matrix`` (and vice versa).
1257
1258This makes it possible to bind most kinds of functions that rely on these types.
1259One major caveat are functions that take Eigen matrices *by reference* and modify
1260them somehow, in which case the information won't be propagated to the caller.
1261
1262.. code-block:: cpp
1263
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001264 /* The Python bindings of these functions won't replicate
1265 the intended effect of modifying the function arguments */
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001266 void scale_by_2(Eigen::Vector3f &v) {
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001267 v *= 2;
1268 }
1269 void scale_by_2(Eigen::Ref<Eigen::MatrixXd> &v) {
1270 v *= 2;
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001271 }
1272
1273To see why this is, refer to the section on :ref:`opaque` (although that
1274section specifically covers STL data types, the underlying issue is the same).
1275The next two sections discuss an efficient alternative for exposing the
1276underlying native Eigen types as opaque objects in a way that still integrates
1277with NumPy and SciPy.
1278
1279.. [#f1] http://eigen.tuxfamily.org
1280
1281.. seealso::
1282
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001283 The file :file:`tests/test_eigen.cpp` contains a complete example that
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001284 shows how to pass Eigen sparse and dense data types in more detail.
1285
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001286Buffer protocol
1287===============
1288
1289Python supports an extremely general and convenient approach for exchanging
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001290data between plugin libraries. Types can expose a buffer view [#f2]_, which
1291provides fast direct access to the raw internal data representation. Suppose we
1292want to bind the following simplistic Matrix class:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001293
1294.. code-block:: cpp
1295
1296 class Matrix {
1297 public:
1298 Matrix(size_t rows, size_t cols) : m_rows(rows), m_cols(cols) {
1299 m_data = new float[rows*cols];
1300 }
1301 float *data() { return m_data; }
1302 size_t rows() const { return m_rows; }
1303 size_t cols() const { return m_cols; }
1304 private:
1305 size_t m_rows, m_cols;
1306 float *m_data;
1307 };
1308
1309The following binding code exposes the ``Matrix`` contents as a buffer object,
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001310making it possible to cast Matrices into NumPy arrays. It is even possible to
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001311completely avoid copy operations with Python expressions like
1312``np.array(matrix_instance, copy = False)``.
1313
1314.. code-block:: cpp
1315
1316 py::class_<Matrix>(m, "Matrix")
1317 .def_buffer([](Matrix &m) -> py::buffer_info {
1318 return py::buffer_info(
Ivan Smirnov5e71e172016-06-26 12:42:34 +01001319 m.data(), /* Pointer to buffer */
1320 sizeof(float), /* Size of one scalar */
1321 py::format_descriptor<float>::format(), /* Python struct-style format descriptor */
1322 2, /* Number of dimensions */
1323 { m.rows(), m.cols() }, /* Buffer dimensions */
1324 { sizeof(float) * m.rows(), /* Strides (in bytes) for each index */
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001325 sizeof(float) }
1326 );
1327 });
1328
1329The snippet above binds a lambda function, which can create ``py::buffer_info``
1330description records on demand describing a given matrix. The contents of
1331``py::buffer_info`` mirror the Python buffer protocol specification.
1332
1333.. code-block:: cpp
1334
1335 struct buffer_info {
1336 void *ptr;
1337 size_t itemsize;
1338 std::string format;
1339 int ndim;
1340 std::vector<size_t> shape;
1341 std::vector<size_t> strides;
1342 };
1343
1344To create a C++ function that can take a Python buffer object as an argument,
1345simply use the type ``py::buffer`` as one of its arguments. Buffers can exist
1346in a great variety of configurations, hence some safety checks are usually
1347necessary in the function body. Below, you can see an basic example on how to
1348define a custom constructor for the Eigen double precision matrix
1349(``Eigen::MatrixXd``) type, which supports initialization from compatible
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001350buffer objects (e.g. a NumPy matrix).
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001351
1352.. code-block:: cpp
1353
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001354 /* Bind MatrixXd (or some other Eigen type) to Python */
1355 typedef Eigen::MatrixXd Matrix;
1356
1357 typedef Matrix::Scalar Scalar;
1358 constexpr bool rowMajor = Matrix::Flags & Eigen::RowMajorBit;
1359
1360 py::class_<Matrix>(m, "Matrix")
1361 .def("__init__", [](Matrix &m, py::buffer b) {
Wenzel Jakobe7628532016-05-05 10:04:44 +02001362 typedef Eigen::Stride<Eigen::Dynamic, Eigen::Dynamic> Strides;
Wenzel Jakobe7628532016-05-05 10:04:44 +02001363
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001364 /* Request a buffer descriptor from Python */
1365 py::buffer_info info = b.request();
1366
1367 /* Some sanity checks ... */
Ivan Smirnov5e71e172016-06-26 12:42:34 +01001368 if (info.format != py::format_descriptor<Scalar>::format())
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001369 throw std::runtime_error("Incompatible format: expected a double array!");
1370
1371 if (info.ndim != 2)
1372 throw std::runtime_error("Incompatible buffer dimension!");
1373
Wenzel Jakobe7628532016-05-05 10:04:44 +02001374 auto strides = Strides(
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001375 info.strides[rowMajor ? 0 : 1] / sizeof(Scalar),
1376 info.strides[rowMajor ? 1 : 0] / sizeof(Scalar));
Wenzel Jakobe7628532016-05-05 10:04:44 +02001377
1378 auto map = Eigen::Map<Matrix, 0, Strides>(
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001379 static_cat<Scalar *>(info.ptr), info.shape[0], info.shape[1], strides);
Wenzel Jakobe7628532016-05-05 10:04:44 +02001380
1381 new (&m) Matrix(map);
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001382 });
1383
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001384For reference, the ``def_buffer()`` call for this Eigen data type should look
1385as follows:
1386
1387.. code-block:: cpp
1388
1389 .def_buffer([](Matrix &m) -> py::buffer_info {
1390 return py::buffer_info(
1391 m.data(), /* Pointer to buffer */
1392 sizeof(Scalar), /* Size of one scalar */
1393 /* Python struct-style format descriptor */
Ivan Smirnov5e71e172016-06-26 12:42:34 +01001394 py::format_descriptor<Scalar>::format(),
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001395 /* Number of dimensions */
1396 2,
1397 /* Buffer dimensions */
1398 { (size_t) m.rows(),
1399 (size_t) m.cols() },
1400 /* Strides (in bytes) for each index */
1401 { sizeof(Scalar) * (rowMajor ? m.cols() : 1),
1402 sizeof(Scalar) * (rowMajor ? 1 : m.rows()) }
1403 );
1404 })
1405
1406For a much easier approach of binding Eigen types (although with some
1407limitations), refer to the section on :ref:`eigen`.
1408
Wenzel Jakob93296692015-10-13 23:21:54 +02001409.. seealso::
1410
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001411 The file :file:`tests/test_buffers.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001412 that demonstrates using the buffer protocol with pybind11 in more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +02001413
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001414.. [#f2] http://docs.python.org/3/c-api/buffer.html
Wenzel Jakob978e3762016-04-07 18:00:41 +02001415
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001416NumPy support
1417=============
1418
1419By exchanging ``py::buffer`` with ``py::array`` in the above snippet, we can
1420restrict the function so that it only accepts NumPy arrays (rather than any
Wenzel Jakob978e3762016-04-07 18:00:41 +02001421type of Python object satisfying the buffer protocol).
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001422
1423In many situations, we want to define a function which only accepts a NumPy
Wenzel Jakob93296692015-10-13 23:21:54 +02001424array of a certain data type. This is possible via the ``py::array_t<T>``
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001425template. For instance, the following function requires the argument to be a
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001426NumPy array containing double precision values.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001427
1428.. code-block:: cpp
1429
Wenzel Jakob93296692015-10-13 23:21:54 +02001430 void f(py::array_t<double> array);
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001431
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001432When it is invoked with a different type (e.g. an integer or a list of
1433integers), the binding code will attempt to cast the input into a NumPy array
1434of the requested type. Note that this feature requires the
1435:file:``pybind11/numpy.h`` header to be included.
1436
1437Data in NumPy arrays is not guaranteed to packed in a dense manner;
1438furthermore, entries can be separated by arbitrary column and row strides.
1439Sometimes, it can be useful to require a function to only accept dense arrays
1440using either the C (row-major) or Fortran (column-major) ordering. This can be
1441accomplished via a second template argument with values ``py::array::c_style``
1442or ``py::array::f_style``.
1443
1444.. code-block:: cpp
1445
Wenzel Jakobb47a9de2016-05-19 16:02:09 +02001446 void f(py::array_t<double, py::array::c_style | py::array::forcecast> array);
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001447
Wenzel Jakobb47a9de2016-05-19 16:02:09 +02001448The ``py::array::forcecast`` argument is the default value of the second
1449template paramenter, and it ensures that non-conforming arguments are converted
1450into an array satisfying the specified requirements instead of trying the next
1451function overload.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001452
Ivan Smirnov223afe32016-07-02 15:33:04 +01001453NumPy structured types
1454======================
1455
1456In order for ``py::array_t`` to work with structured (record) types, we first need
Ivan Smirnov5412a052016-07-02 16:18:42 +01001457to register the memory layout of the type. This can be done via ``PYBIND11_NUMPY_DTYPE``
Ivan Smirnov223afe32016-07-02 15:33:04 +01001458macro which expects the type followed by field names:
1459
1460.. code-block:: cpp
1461
1462 struct A {
1463 int x;
1464 double y;
1465 };
1466
1467 struct B {
1468 int z;
1469 A a;
1470 };
1471
Ivan Smirnov5412a052016-07-02 16:18:42 +01001472 PYBIND11_NUMPY_DTYPE(A, x, y);
1473 PYBIND11_NUMPY_DTYPE(B, z, a);
Ivan Smirnov223afe32016-07-02 15:33:04 +01001474
1475 /* now both A and B can be used as template arguments to py::array_t */
1476
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001477Vectorizing functions
1478=====================
1479
1480Suppose we want to bind a function with the following signature to Python so
1481that it can process arbitrary NumPy array arguments (vectors, matrices, general
1482N-D arrays) in addition to its normal arguments:
1483
1484.. code-block:: cpp
1485
1486 double my_func(int x, float y, double z);
1487
Wenzel Jakob8f4eb002015-10-15 18:13:33 +02001488After including the ``pybind11/numpy.h`` header, this is extremely simple:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001489
1490.. code-block:: cpp
1491
1492 m.def("vectorized_func", py::vectorize(my_func));
1493
1494Invoking the function like below causes 4 calls to be made to ``my_func`` with
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001495each of the array elements. The significant advantage of this compared to
Wenzel Jakob978e3762016-04-07 18:00:41 +02001496solutions like ``numpy.vectorize()`` is that the loop over the elements runs
1497entirely on the C++ side and can be crunched down into a tight, optimized loop
1498by the compiler. The result is returned as a NumPy array of type
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001499``numpy.dtype.float64``.
1500
Wenzel Jakob99279f72016-06-03 11:19:29 +02001501.. code-block:: pycon
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001502
1503 >>> x = np.array([[1, 3],[5, 7]])
1504 >>> y = np.array([[2, 4],[6, 8]])
1505 >>> z = 3
1506 >>> result = vectorized_func(x, y, z)
1507
1508The scalar argument ``z`` is transparently replicated 4 times. The input
1509arrays ``x`` and ``y`` are automatically converted into the right types (they
1510are of type ``numpy.dtype.int64`` but need to be ``numpy.dtype.int32`` and
1511``numpy.dtype.float32``, respectively)
1512
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001513Sometimes we might want to explicitly exclude an argument from the vectorization
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001514because it makes little sense to wrap it in a NumPy array. For instance,
1515suppose the function signature was
1516
1517.. code-block:: cpp
1518
1519 double my_func(int x, float y, my_custom_type *z);
1520
1521This can be done with a stateful Lambda closure:
1522
1523.. code-block:: cpp
1524
1525 // Vectorize a lambda function with a capture object (e.g. to exclude some arguments from the vectorization)
1526 m.def("vectorized_func",
Wenzel Jakob93296692015-10-13 23:21:54 +02001527 [](py::array_t<int> x, py::array_t<float> y, my_custom_type *z) {
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001528 auto stateful_closure = [z](int x, float y) { return my_func(x, y, z); };
1529 return py::vectorize(stateful_closure)(x, y);
1530 }
1531 );
1532
Wenzel Jakob61587162016-01-18 22:38:52 +01001533In cases where the computation is too complicated to be reduced to
1534``vectorize``, it will be necessary to create and access the buffer contents
1535manually. The following snippet contains a complete example that shows how this
1536works (the code is somewhat contrived, since it could have been done more
1537simply using ``vectorize``).
1538
1539.. code-block:: cpp
1540
1541 #include <pybind11/pybind11.h>
1542 #include <pybind11/numpy.h>
1543
1544 namespace py = pybind11;
1545
1546 py::array_t<double> add_arrays(py::array_t<double> input1, py::array_t<double> input2) {
1547 auto buf1 = input1.request(), buf2 = input2.request();
1548
1549 if (buf1.ndim != 1 || buf2.ndim != 1)
1550 throw std::runtime_error("Number of dimensions must be one");
1551
Ivan Smirnovb6518592016-08-13 13:28:56 +01001552 if (buf1.size != buf2.size)
Wenzel Jakob61587162016-01-18 22:38:52 +01001553 throw std::runtime_error("Input shapes must match");
1554
Ivan Smirnovb6518592016-08-13 13:28:56 +01001555 /* No pointer is passed, so NumPy will allocate the buffer */
1556 auto result = py::array_t<double>(buf1.size);
Wenzel Jakob61587162016-01-18 22:38:52 +01001557
1558 auto buf3 = result.request();
1559
1560 double *ptr1 = (double *) buf1.ptr,
1561 *ptr2 = (double *) buf2.ptr,
1562 *ptr3 = (double *) buf3.ptr;
1563
1564 for (size_t idx = 0; idx < buf1.shape[0]; idx++)
1565 ptr3[idx] = ptr1[idx] + ptr2[idx];
1566
1567 return result;
1568 }
1569
1570 PYBIND11_PLUGIN(test) {
1571 py::module m("test");
1572 m.def("add_arrays", &add_arrays, "Add two NumPy arrays");
1573 return m.ptr();
1574 }
1575
Wenzel Jakob93296692015-10-13 23:21:54 +02001576.. seealso::
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001577
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001578 The file :file:`tests/test_numpy_vectorize.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001579 example that demonstrates using :func:`vectorize` in more detail.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001580
Wenzel Jakob93296692015-10-13 23:21:54 +02001581Functions taking Python objects as arguments
1582============================================
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001583
Wenzel Jakob93296692015-10-13 23:21:54 +02001584pybind11 exposes all major Python types using thin C++ wrapper classes. These
1585wrapper classes can also be used as parameters of functions in bindings, which
1586makes it possible to directly work with native Python types on the C++ side.
1587For instance, the following statement iterates over a Python ``dict``:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001588
Wenzel Jakob93296692015-10-13 23:21:54 +02001589.. code-block:: cpp
1590
1591 void print_dict(py::dict dict) {
1592 /* Easily interact with Python types */
1593 for (auto item : dict)
1594 std::cout << "key=" << item.first << ", "
1595 << "value=" << item.second << std::endl;
1596 }
1597
1598Available types include :class:`handle`, :class:`object`, :class:`bool_`,
Wenzel Jakob27e8e102016-01-17 22:36:37 +01001599:class:`int_`, :class:`float_`, :class:`str`, :class:`bytes`, :class:`tuple`,
Wenzel Jakobf64feaf2016-04-28 14:33:45 +02001600:class:`list`, :class:`dict`, :class:`slice`, :class:`none`, :class:`capsule`,
1601:class:`iterable`, :class:`iterator`, :class:`function`, :class:`buffer`,
1602:class:`array`, and :class:`array_t`.
Wenzel Jakob93296692015-10-13 23:21:54 +02001603
Wenzel Jakob436b7312015-10-20 01:04:30 +02001604In this kind of mixed code, it is often necessary to convert arbitrary C++
1605types to Python, which can be done using :func:`cast`:
1606
1607.. code-block:: cpp
1608
1609 MyClass *cls = ..;
1610 py::object obj = py::cast(cls);
1611
1612The reverse direction uses the following syntax:
1613
1614.. code-block:: cpp
1615
1616 py::object obj = ...;
1617 MyClass *cls = obj.cast<MyClass *>();
1618
1619When conversion fails, both directions throw the exception :class:`cast_error`.
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001620It is also possible to call python functions via ``operator()``.
1621
1622.. code-block:: cpp
1623
1624 py::function f = <...>;
1625 py::object result_py = f(1234, "hello", some_instance);
1626 MyClass &result = result_py.cast<MyClass>();
1627
Dean Moldovan625bd482016-09-02 16:40:49 +02001628Keyword arguments are also supported. In Python, there is the usual call syntax:
1629
1630.. code-block:: python
1631
1632 def f(number, say, to):
1633 ... # function code
1634
1635 f(1234, say="hello", to=some_instance) # keyword call in Python
1636
1637In C++, the same call can be made using:
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001638
1639.. code-block:: cpp
1640
Dean Moldovan625bd482016-09-02 16:40:49 +02001641 using pybind11::literals; // to bring in the `_a` literal
1642 f(1234, "say"_a="hello", "to"_a=some_instance); // keyword call in C++
1643
1644Unpacking of ``*args`` and ``**kwargs`` is also possible and can be mixed with
1645other arguments:
1646
1647.. code-block:: cpp
1648
1649 // * unpacking
1650 py::tuple args = py::make_tuple(1234, "hello", some_instance);
1651 f(*args);
1652
1653 // ** unpacking
1654 py::dict kwargs = py::dict("number"_a=1234, "say"_a="hello", "to"_a=some_instance);
1655 f(**kwargs);
1656
1657 // mixed keywords, * and ** unpacking
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001658 py::tuple args = py::make_tuple(1234);
Dean Moldovan625bd482016-09-02 16:40:49 +02001659 py::dict kwargs = py::dict("to"_a=some_instance);
1660 f(*args, "say"_a="hello", **kwargs);
1661
1662Generalized unpacking according to PEP448_ is also supported:
1663
1664.. code-block:: cpp
1665
1666 py::dict kwargs1 = py::dict("number"_a=1234);
1667 py::dict kwargs2 = py::dict("to"_a=some_instance);
1668 f(**kwargs1, "say"_a="hello", **kwargs2);
Wenzel Jakob436b7312015-10-20 01:04:30 +02001669
Wenzel Jakob93296692015-10-13 23:21:54 +02001670.. seealso::
1671
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001672 The file :file:`tests/test_python_types.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001673 example that demonstrates passing native Python types in more detail. The
Dean Moldovan625bd482016-09-02 16:40:49 +02001674 file :file:`tests/test_callbacks.cpp` presents a few examples of calling
1675 Python functions from C++, including keywords arguments and unpacking.
1676
1677.. _PEP448: https://www.python.org/dev/peps/pep-0448/
1678
1679Using Python's print function in C++
1680====================================
1681
1682The usual way to write output in C++ is using ``std::cout`` while in Python one
1683would use ``print``. Since these methods use different buffers, mixing them can
1684lead to output order issues. To resolve this, pybind11 modules can use the
1685:func:`py::print` function which writes to Python's ``sys.stdout`` for consistency.
1686
1687Python's ``print`` function is replicated in the C++ API including optional
1688keyword arguments ``sep``, ``end``, ``file``, ``flush``. Everything works as
1689expected in Python:
1690
1691.. code-block:: cpp
1692
1693 py::print(1, 2.0, "three"); // 1 2.0 three
1694 py::print(1, 2.0, "three", "sep"_a="-"); // 1-2.0-three
1695
1696 auto args = py::make_tuple("unpacked", true);
1697 py::print("->", *args, "end"_a="<-"); // -> unpacked True <-
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001698
1699Default arguments revisited
1700===========================
1701
1702The section on :ref:`default_args` previously discussed basic usage of default
1703arguments using pybind11. One noteworthy aspect of their implementation is that
1704default arguments are converted to Python objects right at declaration time.
1705Consider the following example:
1706
1707.. code-block:: cpp
1708
1709 py::class_<MyClass>("MyClass")
1710 .def("myFunction", py::arg("arg") = SomeType(123));
1711
1712In this case, pybind11 must already be set up to deal with values of the type
1713``SomeType`` (via a prior instantiation of ``py::class_<SomeType>``), or an
1714exception will be thrown.
1715
1716Another aspect worth highlighting is that the "preview" of the default argument
1717in the function signature is generated using the object's ``__repr__`` method.
1718If not available, the signature may not be very helpful, e.g.:
1719
Wenzel Jakob99279f72016-06-03 11:19:29 +02001720.. code-block:: pycon
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001721
1722 FUNCTIONS
1723 ...
1724 | myFunction(...)
Wenzel Jakob48548ea2016-01-17 22:36:44 +01001725 | Signature : (MyClass, arg : SomeType = <SomeType object at 0x101b7b080>) -> NoneType
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001726 ...
1727
1728The first way of addressing this is by defining ``SomeType.__repr__``.
1729Alternatively, it is possible to specify the human-readable preview of the
1730default argument manually using the ``arg_t`` notation:
1731
1732.. code-block:: cpp
1733
1734 py::class_<MyClass>("MyClass")
1735 .def("myFunction", py::arg_t<SomeType>("arg", SomeType(123), "SomeType(123)"));
1736
Wenzel Jakobc769fce2016-03-03 12:03:30 +01001737Sometimes it may be necessary to pass a null pointer value as a default
1738argument. In this case, remember to cast it to the underlying type in question,
1739like so:
1740
1741.. code-block:: cpp
1742
1743 py::class_<MyClass>("MyClass")
1744 .def("myFunction", py::arg("arg") = (SomeType *) nullptr);
1745
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001746Binding functions that accept arbitrary numbers of arguments and keywords arguments
1747===================================================================================
1748
1749Python provides a useful mechanism to define functions that accept arbitrary
1750numbers of arguments and keyword arguments:
1751
1752.. code-block:: cpp
1753
1754 def generic(*args, **kwargs):
1755 # .. do something with args and kwargs
1756
1757Such functions can also be created using pybind11:
1758
1759.. code-block:: cpp
1760
1761 void generic(py::args args, py::kwargs kwargs) {
1762 /// .. do something with args
1763 if (kwargs)
1764 /// .. do something with kwargs
1765 }
1766
1767 /// Binding code
1768 m.def("generic", &generic);
1769
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001770(See ``tests/test_kwargs_and_defaults.cpp``). The class ``py::args``
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001771derives from ``py::list`` and ``py::kwargs`` derives from ``py::dict`` Note
1772that the ``kwargs`` argument is invalid if no keyword arguments were actually
1773provided. Please refer to the other examples for details on how to iterate
1774over these, and on how to cast their entries into C++ objects.
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001775
Wenzel Jakob3764e282016-08-01 23:34:48 +02001776.. warning::
1777
1778 Unlike Python, pybind11 does not allow combining normal parameters with the
1779 ``args`` / ``kwargs`` special parameters.
1780
Wenzel Jakob2dfbade2016-01-17 22:36:37 +01001781Partitioning code over multiple extension modules
1782=================================================
1783
Wenzel Jakob90d2f5e2016-04-11 14:30:11 +02001784It's straightforward to split binding code over multiple extension modules,
1785while referencing types that are declared elsewhere. Everything "just" works
1786without any special precautions. One exception to this rule occurs when
1787extending a type declared in another extension module. Recall the basic example
1788from Section :ref:`inheritance`.
Wenzel Jakob2dfbade2016-01-17 22:36:37 +01001789
1790.. code-block:: cpp
1791
1792 py::class_<Pet> pet(m, "Pet");
1793 pet.def(py::init<const std::string &>())
1794 .def_readwrite("name", &Pet::name);
1795
1796 py::class_<Dog>(m, "Dog", pet /* <- specify parent */)
1797 .def(py::init<const std::string &>())
1798 .def("bark", &Dog::bark);
1799
1800Suppose now that ``Pet`` bindings are defined in a module named ``basic``,
1801whereas the ``Dog`` bindings are defined somewhere else. The challenge is of
1802course that the variable ``pet`` is not available anymore though it is needed
1803to indicate the inheritance relationship to the constructor of ``class_<Dog>``.
1804However, it can be acquired as follows:
1805
1806.. code-block:: cpp
1807
1808 py::object pet = (py::object) py::module::import("basic").attr("Pet");
1809
1810 py::class_<Dog>(m, "Dog", pet)
1811 .def(py::init<const std::string &>())
1812 .def("bark", &Dog::bark);
1813
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001814Alternatively, we can rely on the ``base`` tag, which performs an automated
1815lookup of the corresponding Python type. However, this also requires invoking
1816the ``import`` function once to ensure that the pybind11 binding code of the
1817module ``basic`` has been executed.
1818
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001819.. code-block:: cpp
1820
1821 py::module::import("basic");
1822
1823 py::class_<Dog>(m, "Dog", py::base<Pet>())
1824 .def(py::init<const std::string &>())
1825 .def("bark", &Dog::bark);
Wenzel Jakobeda978e2016-03-15 15:05:40 +01001826
Wenzel Jakob978e3762016-04-07 18:00:41 +02001827Naturally, both methods will fail when there are cyclic dependencies.
1828
Wenzel Jakob90d2f5e2016-04-11 14:30:11 +02001829Note that compiling code which has its default symbol visibility set to
1830*hidden* (e.g. via the command line flag ``-fvisibility=hidden`` on GCC/Clang) can interfere with the
1831ability to access types defined in another extension module. Workarounds
1832include changing the global symbol visibility (not recommended, because it will
1833lead unnecessarily large binaries) or manually exporting types that are
1834accessed by multiple extension modules:
1835
1836.. code-block:: cpp
1837
1838 #ifdef _WIN32
1839 # define EXPORT_TYPE __declspec(dllexport)
1840 #else
1841 # define EXPORT_TYPE __attribute__ ((visibility("default")))
1842 #endif
1843
1844 class EXPORT_TYPE Dog : public Animal {
1845 ...
1846 };
1847
1848
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001849Pickling support
1850================
1851
1852Python's ``pickle`` module provides a powerful facility to serialize and
1853de-serialize a Python object graph into a binary data stream. To pickle and
Wenzel Jakob3d0e6ff2016-04-13 11:48:10 +02001854unpickle C++ classes using pybind11, two additional functions must be provided.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001855Suppose the class in question has the following signature:
1856
1857.. code-block:: cpp
1858
1859 class Pickleable {
1860 public:
1861 Pickleable(const std::string &value) : m_value(value) { }
1862 const std::string &value() const { return m_value; }
1863
1864 void setExtra(int extra) { m_extra = extra; }
1865 int extra() const { return m_extra; }
1866 private:
1867 std::string m_value;
1868 int m_extra = 0;
1869 };
1870
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001871The binding code including the requisite ``__setstate__`` and ``__getstate__`` methods [#f3]_
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001872looks as follows:
1873
1874.. code-block:: cpp
1875
1876 py::class_<Pickleable>(m, "Pickleable")
1877 .def(py::init<std::string>())
1878 .def("value", &Pickleable::value)
1879 .def("extra", &Pickleable::extra)
1880 .def("setExtra", &Pickleable::setExtra)
1881 .def("__getstate__", [](const Pickleable &p) {
1882 /* Return a tuple that fully encodes the state of the object */
1883 return py::make_tuple(p.value(), p.extra());
1884 })
1885 .def("__setstate__", [](Pickleable &p, py::tuple t) {
1886 if (t.size() != 2)
1887 throw std::runtime_error("Invalid state!");
1888
Wenzel Jakobd40885a2016-04-13 13:30:05 +02001889 /* Invoke the in-place constructor. Note that this is needed even
1890 when the object just has a trivial default constructor */
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001891 new (&p) Pickleable(t[0].cast<std::string>());
1892
1893 /* Assign any additional state */
1894 p.setExtra(t[1].cast<int>());
1895 });
1896
1897An instance can now be pickled as follows:
1898
1899.. code-block:: python
1900
1901 try:
1902 import cPickle as pickle # Use cPickle on Python 2.7
1903 except ImportError:
1904 import pickle
1905
1906 p = Pickleable("test_value")
1907 p.setExtra(15)
Wenzel Jakob81e09752016-04-30 23:13:03 +02001908 data = pickle.dumps(p, 2)
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001909
Wenzel Jakob81e09752016-04-30 23:13:03 +02001910Note that only the cPickle module is supported on Python 2.7. The second
1911argument to ``dumps`` is also crucial: it selects the pickle protocol version
19122, since the older version 1 is not supported. Newer versions are also fine—for
1913instance, specify ``-1`` to always use the latest available version. Beware:
1914failure to follow these instructions will cause important pybind11 memory
1915allocation routines to be skipped during unpickling, which will likely lead to
1916memory corruption and/or segmentation faults.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001917
1918.. seealso::
1919
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001920 The file :file:`tests/test_pickling.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001921 that demonstrates how to pickle and unpickle types using pybind11 in more
1922 detail.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001923
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001924.. [#f3] http://docs.python.org/3/library/pickle.html#pickling-class-instances
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001925
1926Generating documentation using Sphinx
1927=====================================
1928
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001929Sphinx [#f4]_ has the ability to inspect the signatures and documentation
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001930strings in pybind11-based extension modules to automatically generate beautiful
Wenzel Jakobca8dc082016-06-03 14:24:17 +02001931documentation in a variety formats. The python_example repository [#f5]_ contains a
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001932simple example repository which uses this approach.
1933
1934There are two potential gotchas when using this approach: first, make sure that
1935the resulting strings do not contain any :kbd:`TAB` characters, which break the
1936docstring parsing routines. You may want to use C++11 raw string literals,
1937which are convenient for multi-line comments. Conveniently, any excess
1938indentation will be automatically be removed by Sphinx. However, for this to
1939work, it is important that all lines are indented consistently, i.e.:
1940
1941.. code-block:: cpp
1942
1943 // ok
1944 m.def("foo", &foo, R"mydelimiter(
1945 The foo function
1946
1947 Parameters
1948 ----------
1949 )mydelimiter");
1950
1951 // *not ok*
1952 m.def("foo", &foo, R"mydelimiter(The foo function
1953
1954 Parameters
1955 ----------
1956 )mydelimiter");
1957
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001958.. [#f4] http://www.sphinx-doc.org
Wenzel Jakobca8dc082016-06-03 14:24:17 +02001959.. [#f5] http://github.com/pybind/python_example
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001960
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001961Evaluating Python expressions from strings and files
1962====================================================
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001963
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001964pybind11 provides the :func:`eval` and :func:`eval_file` functions to evaluate
1965Python expressions and statements. The following example illustrates how they
1966can be used.
1967
1968Both functions accept a template parameter that describes how the argument
1969should be interpreted. Possible choices include ``eval_expr`` (isolated
1970expression), ``eval_single_statement`` (a single statement, return value is
1971always ``none``), and ``eval_statements`` (sequence of statements, return value
1972is always ``none``).
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001973
1974.. code-block:: cpp
1975
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001976 // At beginning of file
1977 #include <pybind11/eval.h>
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001978
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001979 ...
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001980
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001981 // Evaluate in scope of main module
1982 py::object scope = py::module::import("__main__").attr("__dict__");
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001983
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001984 // Evaluate an isolated expression
1985 int result = py::eval("my_variable + 10", scope).cast<int>();
1986
1987 // Evaluate a sequence of statements
1988 py::eval<py::eval_statements>(
1989 "print('Hello')\n"
1990 "print('world!');",
1991 scope);
1992
1993 // Evaluate the statements in an separate Python file on disk
1994 py::eval_file("script.py", scope);
Wenzel Jakob48ce0722016-09-06 14:13:22 +09001995
1996Development of custom type casters
1997==================================
1998
1999In very rare cases, applications may require custom type casters that cannot be
2000expressed using the abstractions provided by pybind11, thus requiring raw
2001Python C API calls. This is fairly advanced usage and should only be pursued by
2002experts who are familiar with the intricacies of Python reference counting.
2003
2004The following snippets demonstrate how this works for a very simple ``inty``
2005type that that should be convertible from Python types that provide a
2006``__int__(self)`` method.
2007
2008.. code-block:: cpp
2009
2010 struct inty { long long_value; };
2011
2012 void print(inty s) {
2013 std::cout << s.long_value << std::endl;
2014 }
2015
2016The following Python snippet demonstrates the intended usage from the Python side:
2017
2018.. code-block:: python
2019
2020 class A:
2021 def __int__(self):
2022 return 123
2023
2024 from example import print
2025 print(A())
2026
2027To register the necessary conversion routines, it is necessary to add
2028a partial overload to the ``pybind11::detail::type_caster<T>`` template.
2029Although this is an implementation detail, adding partial overloads to this
2030type is explicitly allowed.
2031
2032.. code-block:: cpp
2033
2034 namespace pybind11 {
2035 namespace detail {
2036 template <> struct type_caster<inty> {
2037 public:
2038 /**
2039 * This macro establishes the name 'inty' in
2040 * function signatures and declares a local variable
2041 * 'value' of type inty
2042 */
2043 PYBIND11_TYPE_CASTER(inty, _("inty"));
2044
2045 /**
2046 * Conversion part 1 (Python->C++): convert a PyObject into a inty
2047 * instance or return false upon failure. The second argument
2048 * indicates whether implicit conversions should be applied.
2049 */
2050 bool load(handle src, bool) {
2051 /* Extract PyObject from handle */
2052 PyObject *source = src.ptr();
2053 /* Try converting into a Python integer value */
2054 PyObject *tmp = PyNumber_Long(source);
2055 if (!tmp)
2056 return false;
2057 /* Now try to convert into a C++ int */
2058 value.long_value = PyLong_AsLong(tmp);
2059 Py_DECREF(tmp);
2060 /* Ensure return code was OK (to avoid out-of-range errors etc) */
2061 return !(value.long_value == -1 && !PyErr_Occurred());
2062 }
2063
2064 /**
2065 * Conversion part 2 (C++ -> Python): convert an inty instance into
2066 * a Python object. The second and third arguments are used to
2067 * indicate the return value policy and parent object (for
2068 * ``return_value_policy::reference_internal``) and are generally
2069 * ignored by implicit casters.
2070 */
2071 static handle cast(inty src, return_value_policy /* policy */, handle /* parent */) {
2072 return PyLong_FromLong(src.long_value);
2073 }
2074 };
2075 }
2076 };