cast.h
Go to the documentation of this file.
1 /*
2  pybind11/cast.h: Partial template specializations to cast between
3  C++ and Python types
4 
5  Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@epfl.ch>
6 
7  All rights reserved. Use of this source code is governed by a
8  BSD-style license that can be found in the LICENSE file.
9 */
10 
11 #pragma once
12 
13 #include "pytypes.h"
14 #include "detail/typeid.h"
15 #include "detail/descr.h"
16 #include "detail/internals.h"
17 #include <array>
18 #include <limits>
19 #include <tuple>
20 #include <type_traits>
21 
22 #if defined(PYBIND11_CPP17)
23 # if defined(__has_include)
24 # if __has_include(<string_view>)
25 # define PYBIND11_HAS_STRING_VIEW
26 # endif
27 # elif defined(_MSC_VER)
28 # define PYBIND11_HAS_STRING_VIEW
29 # endif
30 #endif
31 #ifdef PYBIND11_HAS_STRING_VIEW
32 #include <string_view>
33 #endif
34 
35 #if defined(__cpp_lib_char8_t) && __cpp_lib_char8_t >= 201811L
36 # define PYBIND11_HAS_U8STRING
37 #endif
38 
41 
45 public:
48  get_internals().loader_patient_stack.push_back(nullptr);
49  }
50 
54  if (stack.empty())
55  pybind11_fail("loader_life_support: internal error");
56 
57  auto ptr = stack.back();
58  stack.pop_back();
59  Py_CLEAR(ptr);
60 
61  // A heuristic to reduce the stack's capacity (e.g. after long recursive calls)
62  if (stack.capacity() > 16 && !stack.empty() && stack.capacity() / stack.size() > 2)
63  stack.shrink_to_fit();
64  }
65 
70  if (stack.empty())
71  throw cast_error("When called outside a bound function, py::cast() cannot "
72  "do Python -> C++ conversions which require the creation "
73  "of temporary values");
74 
75  auto &list_ptr = stack.back();
76  if (list_ptr == nullptr) {
77  list_ptr = PyList_New(1);
78  if (!list_ptr)
79  pybind11_fail("loader_life_support: error allocating list");
80  PyList_SET_ITEM(list_ptr, 0, h.inc_ref().ptr());
81  } else {
82  auto result = PyList_Append(list_ptr, h.ptr());
83  if (result == -1)
84  pybind11_fail("loader_life_support: error adding patient");
85  }
86  }
87 };
88 
89 // Gets the cache entry for the given type, creating it if necessary. The return value is the pair
90 // returned by emplace, i.e. an iterator for the entry and a bool set to `true` if the entry was
91 // just created.
92 inline std::pair<decltype(internals::registered_types_py)::iterator, bool> all_type_info_get_cache(PyTypeObject *type);
93 
94 // Populates a just-created cache entry.
95 PYBIND11_NOINLINE inline void all_type_info_populate(PyTypeObject *t, std::vector<type_info *> &bases) {
96  std::vector<PyTypeObject *> check;
97  for (handle parent : reinterpret_borrow<tuple>(t->tp_bases))
98  check.push_back((PyTypeObject *) parent.ptr());
99 
100  auto const &type_dict = get_internals().registered_types_py;
101  for (size_t i = 0; i < check.size(); i++) {
102  auto type = check[i];
103  // Ignore Python2 old-style class super type:
104  if (!PyType_Check((PyObject *) type)) continue;
105 
106  // Check `type` in the current set of registered python types:
107  auto it = type_dict.find(type);
108  if (it != type_dict.end()) {
109  // We found a cache entry for it, so it's either pybind-registered or has pre-computed
110  // pybind bases, but we have to make sure we haven't already seen the type(s) before: we
111  // want to follow Python/virtual C++ rules that there should only be one instance of a
112  // common base.
113  for (auto *tinfo : it->second) {
114  // NB: Could use a second set here, rather than doing a linear search, but since
115  // having a large number of immediate pybind11-registered types seems fairly
116  // unlikely, that probably isn't worthwhile.
117  bool found = false;
118  for (auto *known : bases) {
119  if (known == tinfo) { found = true; break; }
120  }
121  if (!found) bases.push_back(tinfo);
122  }
123  }
124  else if (type->tp_bases) {
125  // It's some python type, so keep follow its bases classes to look for one or more
126  // registered types
127  if (i + 1 == check.size()) {
128  // When we're at the end, we can pop off the current element to avoid growing
129  // `check` when adding just one base (which is typical--i.e. when there is no
130  // multiple inheritance)
131  check.pop_back();
132  i--;
133  }
134  for (handle parent : reinterpret_borrow<tuple>(type->tp_bases))
135  check.push_back((PyTypeObject *) parent.ptr());
136  }
137  }
138 }
139 
150 inline const std::vector<detail::type_info *> &all_type_info(PyTypeObject *type) {
151  auto ins = all_type_info_get_cache(type);
152  if (ins.second)
153  // New cache entry: populate it
154  all_type_info_populate(type, ins.first->second);
155 
156  return ins.first->second;
157 }
158 
164 PYBIND11_NOINLINE inline detail::type_info* get_type_info(PyTypeObject *type) {
165  auto &bases = all_type_info(type);
166  if (bases.empty())
167  return nullptr;
168  if (bases.size() > 1)
169  pybind11_fail("pybind11::detail::get_type_info: type has multiple pybind11-registered bases");
170  return bases.front();
171 }
172 
173 inline detail::type_info *get_local_type_info(const std::type_index &tp) {
174  auto &locals = registered_local_types_cpp();
175  auto it = locals.find(tp);
176  if (it != locals.end())
177  return it->second;
178  return nullptr;
179 }
180 
181 inline detail::type_info *get_global_type_info(const std::type_index &tp) {
182  auto &types = get_internals().registered_types_cpp;
183  auto it = types.find(tp);
184  if (it != types.end())
185  return it->second;
186  return nullptr;
187 }
188 
190 PYBIND11_NOINLINE inline detail::type_info *get_type_info(const std::type_index &tp,
191  bool throw_if_missing = false) {
192  if (auto ltype = get_local_type_info(tp))
193  return ltype;
194  if (auto gtype = get_global_type_info(tp))
195  return gtype;
196 
197  if (throw_if_missing) {
198  std::string tname = tp.name();
199  detail::clean_type_id(tname);
200  pybind11_fail("pybind11::detail::get_type_info: unable to find type info for \"" + tname + "\"");
201  }
202  return nullptr;
203 }
204 
205 PYBIND11_NOINLINE inline handle get_type_handle(const std::type_info &tp, bool throw_if_missing) {
206  detail::type_info *type_info = get_type_info(tp, throw_if_missing);
207  return handle(type_info ? ((PyObject *) type_info->type) : nullptr);
208 }
209 
211  instance *inst = nullptr;
212  size_t index = 0u;
213  const detail::type_info *type = nullptr;
214  void **vh = nullptr;
215 
216  // Main constructor for a found value/holder:
217  value_and_holder(instance *i, const detail::type_info *type, size_t vpos, size_t index) :
218  inst{i}, index{index}, type{type},
219  vh{inst->simple_layout ? inst->simple_value_holder : &inst->nonsimple.values_and_holders[vpos]}
220  {}
221 
222  // Default constructor (used to signal a value-and-holder not found by get_value_and_holder())
223  value_and_holder() = default;
224 
225  // Used for past-the-end iterator
226  value_and_holder(size_t index) : index{index} {}
227 
228  template <typename V = void> V *&value_ptr() const {
229  return reinterpret_cast<V *&>(vh[0]);
230  }
231  // True if this `value_and_holder` has a non-null value pointer
232  explicit operator bool() const { return value_ptr(); }
233 
234  template <typename H> H &holder() const {
235  return reinterpret_cast<H &>(vh[1]);
236  }
237  bool holder_constructed() const {
238  return inst->simple_layout
241  }
242  void set_holder_constructed(bool v = true) {
243  if (inst->simple_layout)
245  else if (v)
247  else
249  }
250  bool instance_registered() const {
251  return inst->simple_layout
254  }
255  void set_instance_registered(bool v = true) {
256  if (inst->simple_layout)
258  else if (v)
260  else
262  }
263 };
264 
265 // Container for accessing and iterating over an instance's values/holders
267 private:
269  using type_vec = std::vector<detail::type_info *>;
270  const type_vec &tinfo;
271 
272 public:
273  values_and_holders(instance *inst) : inst{inst}, tinfo(all_type_info(Py_TYPE(inst))) {}
274 
275  struct iterator {
276  private:
277  instance *inst = nullptr;
278  const type_vec *types = nullptr;
280  friend struct values_and_holders;
281  iterator(instance *inst, const type_vec *tinfo)
282  : inst{inst}, types{tinfo},
283  curr(inst /* instance */,
284  types->empty() ? nullptr : (*types)[0] /* type info */,
285  0, /* vpos: (non-simple types only): the first vptr comes first */
286  0 /* index */)
287  {}
288  // Past-the-end iterator:
289  iterator(size_t end) : curr(end) {}
290  public:
291  bool operator==(const iterator &other) const { return curr.index == other.curr.index; }
292  bool operator!=(const iterator &other) const { return curr.index != other.curr.index; }
294  if (!inst->simple_layout)
295  curr.vh += 1 + (*types)[curr.index]->holder_size_in_ptrs;
296  ++curr.index;
297  curr.type = curr.index < types->size() ? (*types)[curr.index] : nullptr;
298  return *this;
299  }
300  value_and_holder &operator*() { return curr; }
301  value_and_holder *operator->() { return &curr; }
302  };
303 
304  iterator begin() { return iterator(inst, &tinfo); }
305  iterator end() { return iterator(tinfo.size()); }
306 
307  iterator find(const type_info *find_type) {
308  auto it = begin(), endit = end();
309  while (it != endit && it->type != find_type) ++it;
310  return it;
311  }
312 
313  size_t size() { return tinfo.size(); }
314 };
315 
326 PYBIND11_NOINLINE inline value_and_holder instance::get_value_and_holder(const type_info *find_type /*= nullptr default in common.h*/, bool throw_if_missing /*= true in common.h*/) {
327  // Optimize common case:
328  if (!find_type || Py_TYPE(this) == find_type->type)
329  return value_and_holder(this, find_type, 0, 0);
330 
331  detail::values_and_holders vhs(this);
332  auto it = vhs.find(find_type);
333  if (it != vhs.end())
334  return *it;
335 
336  if (!throw_if_missing)
337  return value_and_holder();
338 
339 #if defined(NDEBUG)
340  pybind11_fail("pybind11::detail::instance::get_value_and_holder: "
341  "type is not a pybind11 base of the given instance "
342  "(compile in debug mode for type details)");
343 #else
344  pybind11_fail("pybind11::detail::instance::get_value_and_holder: `" +
345  std::string(find_type->type->tp_name) + "' is not a pybind11 base of the given `" +
346  std::string(Py_TYPE(this)->tp_name) + "' instance");
347 #endif
348 }
349 
351  auto &tinfo = all_type_info(Py_TYPE(this));
352 
353  const size_t n_types = tinfo.size();
354 
355  if (n_types == 0)
356  pybind11_fail("instance allocation failed: new instance has no pybind11-registered base types");
357 
358  simple_layout =
359  n_types == 1 && tinfo.front()->holder_size_in_ptrs <= instance_simple_holder_in_ptrs();
360 
361  // Simple path: no python-side multiple inheritance, and a small-enough holder
362  if (simple_layout) {
363  simple_value_holder[0] = nullptr;
364  simple_holder_constructed = false;
365  simple_instance_registered = false;
366  }
367  else { // multiple base types or a too-large holder
368  // Allocate space to hold: [v1*][h1][v2*][h2]...[bb...] where [vN*] is a value pointer,
369  // [hN] is the (uninitialized) holder instance for value N, and [bb...] is a set of bool
370  // values that tracks whether each associated holder has been initialized. Each [block] is
371  // padded, if necessary, to an integer multiple of sizeof(void *).
372  size_t space = 0;
373  for (auto t : tinfo) {
374  space += 1; // value pointer
375  space += t->holder_size_in_ptrs; // holder instance
376  }
377  size_t flags_at = space;
378  space += size_in_ptrs(n_types); // status bytes (holder_constructed and instance_registered)
379 
380  // Allocate space for flags, values, and holders, and initialize it to 0 (flags and values,
381  // in particular, need to be 0). Use Python's memory allocation functions: in Python 3.6
382  // they default to using pymalloc, which is designed to be efficient for small allocations
383  // like the one we're doing here; in earlier versions (and for larger allocations) they are
384  // just wrappers around malloc.
385 #if PY_VERSION_HEX >= 0x03050000
386  nonsimple.values_and_holders = (void **) PyMem_Calloc(space, sizeof(void *));
387  if (!nonsimple.values_and_holders) throw std::bad_alloc();
388 #else
389  nonsimple.values_and_holders = (void **) PyMem_New(void *, space);
390  if (!nonsimple.values_and_holders) throw std::bad_alloc();
391  std::memset(nonsimple.values_and_holders, 0, space * sizeof(void *));
392 #endif
393  nonsimple.status = reinterpret_cast<uint8_t *>(&nonsimple.values_and_holders[flags_at]);
394  }
395  owned = true;
396 }
397 
399  if (!simple_layout)
400  PyMem_Free(nonsimple.values_and_holders);
401 }
402 
403 PYBIND11_NOINLINE inline bool isinstance_generic(handle obj, const std::type_info &tp) {
404  handle type = detail::get_type_handle(tp, false);
405  if (!type)
406  return false;
407  return isinstance(obj, type);
408 }
409 
410 PYBIND11_NOINLINE inline std::string error_string() {
411  if (!PyErr_Occurred()) {
412  PyErr_SetString(PyExc_RuntimeError, "Unknown internal error occurred");
413  return "Unknown internal error occurred";
414  }
415 
416  error_scope scope; // Preserve error state
417 
418  std::string errorString;
419  if (scope.type) {
420  errorString += handle(scope.type).attr("__name__").cast<std::string>();
421  errorString += ": ";
422  }
423  if (scope.value)
424  errorString += (std::string) str(scope.value);
425 
426  PyErr_NormalizeException(&scope.type, &scope.value, &scope.trace);
427 
428 #if PY_MAJOR_VERSION >= 3
429  if (scope.trace != nullptr)
430  PyException_SetTraceback(scope.value, scope.trace);
431 #endif
432 
433 #if !defined(PYPY_VERSION)
434  if (scope.trace) {
435  auto *trace = (PyTracebackObject *) scope.trace;
436 
437  /* Get the deepest trace possible */
438  while (trace->tb_next)
439  trace = trace->tb_next;
440 
441  PyFrameObject *frame = trace->tb_frame;
442  errorString += "\n\nAt:\n";
443  while (frame) {
444  int lineno = PyFrame_GetLineNumber(frame);
445  errorString +=
446  " " + handle(frame->f_code->co_filename).cast<std::string>() +
447  "(" + std::to_string(lineno) + "): " +
448  handle(frame->f_code->co_name).cast<std::string>() + "\n";
449  frame = frame->f_back;
450  }
451  }
452 #endif
453 
454  return errorString;
455 }
456 
457 PYBIND11_NOINLINE inline handle get_object_handle(const void *ptr, const detail::type_info *type ) {
458  auto &instances = get_internals().registered_instances;
459  auto range = instances.equal_range(ptr);
460  for (auto it = range.first; it != range.second; ++it) {
461  for (const auto &vh : values_and_holders(it->second)) {
462  if (vh.type == type)
463  return handle((PyObject *) it->second);
464  }
465  }
466  return handle();
467 }
468 
469 inline PyThreadState *get_thread_state_unchecked() {
470 #if defined(PYPY_VERSION)
471  return PyThreadState_GET();
472 #elif PY_VERSION_HEX < 0x03000000
473  return _PyThreadState_Current;
474 #elif PY_VERSION_HEX < 0x03050000
475  return (PyThreadState*) _Py_atomic_load_relaxed(&_PyThreadState_Current);
476 #elif PY_VERSION_HEX < 0x03050200
477  return (PyThreadState*) _PyThreadState_Current.value;
478 #else
479  return _PyThreadState_UncheckedGet();
480 #endif
481 }
482 
483 // Forward declarations
484 inline void keep_alive_impl(handle nurse, handle patient);
485 inline PyObject *make_new_instance(PyTypeObject *type);
486 
488 public:
490  : typeinfo(get_type_info(type_info)), cpptype(&type_info) { }
491 
493  : typeinfo(typeinfo), cpptype(typeinfo ? typeinfo->cpptype : nullptr) { }
494 
495  bool load(handle src, bool convert) {
496  return load_impl<type_caster_generic>(src, convert);
497  }
498 
499  PYBIND11_NOINLINE static handle cast(const void *_src, return_value_policy policy, handle parent,
500  const detail::type_info *tinfo,
501  void *(*copy_constructor)(const void *),
502  void *(*move_constructor)(const void *),
503  const void *existing_holder = nullptr) {
504  if (!tinfo) // no type info: error will be set already
505  return handle();
506 
507  void *src = const_cast<void *>(_src);
508  if (src == nullptr)
509  return none().release();
510 
511  auto it_instances = get_internals().registered_instances.equal_range(src);
512  for (auto it_i = it_instances.first; it_i != it_instances.second; ++it_i) {
513  for (auto instance_type : detail::all_type_info(Py_TYPE(it_i->second))) {
514  if (instance_type && same_type(*instance_type->cpptype, *tinfo->cpptype))
515  return handle((PyObject *) it_i->second).inc_ref();
516  }
517  }
518 
519  auto inst = reinterpret_steal<object>(make_new_instance(tinfo->type));
520  auto wrapper = reinterpret_cast<instance *>(inst.ptr());
521  wrapper->owned = false;
522  void *&valueptr = values_and_holders(wrapper).begin()->value_ptr();
523 
524  switch (policy) {
527  valueptr = src;
528  wrapper->owned = true;
529  break;
530 
533  valueptr = src;
534  wrapper->owned = false;
535  break;
536 
538  if (copy_constructor)
539  valueptr = copy_constructor(src);
540  else {
541 #if defined(NDEBUG)
542  throw cast_error("return_value_policy = copy, but type is "
543  "non-copyable! (compile in debug mode for details)");
544 #else
545  std::string type_name(tinfo->cpptype->name());
547  throw cast_error("return_value_policy = copy, but type " +
548  type_name + " is non-copyable!");
549 #endif
550  }
551  wrapper->owned = true;
552  break;
553 
555  if (move_constructor)
556  valueptr = move_constructor(src);
557  else if (copy_constructor)
558  valueptr = copy_constructor(src);
559  else {
560 #if defined(NDEBUG)
561  throw cast_error("return_value_policy = move, but type is neither "
562  "movable nor copyable! "
563  "(compile in debug mode for details)");
564 #else
565  std::string type_name(tinfo->cpptype->name());
567  throw cast_error("return_value_policy = move, but type " +
568  type_name + " is neither movable nor copyable!");
569 #endif
570  }
571  wrapper->owned = true;
572  break;
573 
575  valueptr = src;
576  wrapper->owned = false;
577  keep_alive_impl(inst, parent);
578  break;
579 
580  default:
581  throw cast_error("unhandled return_value_policy: should not happen!");
582  }
583 
584  tinfo->init_instance(wrapper, existing_holder);
585 
586  return inst.release();
587  }
588 
589  // Base methods for generic caster; there are overridden in copyable_holder_caster
591  auto *&vptr = v_h.value_ptr();
592  // Lazy allocation for unallocated values:
593  if (vptr == nullptr) {
594  auto *type = v_h.type ? v_h.type : typeinfo;
595  if (type->operator_new) {
596  vptr = type->operator_new(type->type_size);
597  } else {
598  #if defined(__cpp_aligned_new) && (!defined(_MSC_VER) || _MSC_VER >= 1912)
599  if (type->type_align > __STDCPP_DEFAULT_NEW_ALIGNMENT__)
600  vptr = ::operator new(type->type_size,
601  std::align_val_t(type->type_align));
602  else
603  #endif
604  vptr = ::operator new(type->type_size);
605  }
606  }
607  value = vptr;
608  }
610  for (auto &cast : typeinfo->implicit_casts) {
611  type_caster_generic sub_caster(*cast.first);
612  if (sub_caster.load(src, convert)) {
613  value = cast.second(sub_caster.value);
614  return true;
615  }
616  }
617  return false;
618  }
620  for (auto &converter : *typeinfo->direct_conversions) {
621  if (converter(src.ptr(), value))
622  return true;
623  }
624  return false;
625  }
627 
628  PYBIND11_NOINLINE static void *local_load(PyObject *src, const type_info *ti) {
629  auto caster = type_caster_generic(ti);
630  if (caster.load(src, false))
631  return caster.value;
632  return nullptr;
633  }
634 
638  constexpr auto *local_key = PYBIND11_MODULE_LOCAL_ID;
639  const auto pytype = type::handle_of(src);
640  if (!hasattr(pytype, local_key))
641  return false;
642 
643  type_info *foreign_typeinfo = reinterpret_borrow<capsule>(getattr(pytype, local_key));
644  // Only consider this foreign loader if actually foreign and is a loader of the correct cpp type
645  if (foreign_typeinfo->module_local_load == &local_load
646  || (cpptype && !same_type(*cpptype, *foreign_typeinfo->cpptype)))
647  return false;
648 
649  if (auto result = foreign_typeinfo->module_local_load(src.ptr(), foreign_typeinfo)) {
650  value = result;
651  return true;
652  }
653  return false;
654  }
655 
656  // Implementation of `load`; this takes the type of `this` so that it can dispatch the relevant
657  // bits of code between here and copyable_holder_caster where the two classes need different
658  // logic (without having to resort to virtual inheritance).
659  template <typename ThisT>
661  if (!src) return false;
662  if (!typeinfo) return try_load_foreign_module_local(src);
663  if (src.is_none()) {
664  // Defer accepting None to other overloads (if we aren't in convert mode):
665  if (!convert) return false;
666  value = nullptr;
667  return true;
668  }
669 
670  auto &this_ = static_cast<ThisT &>(*this);
671  this_.check_holder_compat();
672 
673  PyTypeObject *srctype = Py_TYPE(src.ptr());
674 
675  // Case 1: If src is an exact type match for the target type then we can reinterpret_cast
676  // the instance's value pointer to the target type:
677  if (srctype == typeinfo->type) {
678  this_.load_value(reinterpret_cast<instance *>(src.ptr())->get_value_and_holder());
679  return true;
680  }
681  // Case 2: We have a derived class
682  else if (PyType_IsSubtype(srctype, typeinfo->type)) {
683  auto &bases = all_type_info(srctype);
684  bool no_cpp_mi = typeinfo->simple_type;
685 
686  // Case 2a: the python type is a Python-inherited derived class that inherits from just
687  // one simple (no MI) pybind11 class, or is an exact match, so the C++ instance is of
688  // the right type and we can use reinterpret_cast.
689  // (This is essentially the same as case 2b, but because not using multiple inheritance
690  // is extremely common, we handle it specially to avoid the loop iterator and type
691  // pointer lookup overhead)
692  if (bases.size() == 1 && (no_cpp_mi || bases.front()->type == typeinfo->type)) {
693  this_.load_value(reinterpret_cast<instance *>(src.ptr())->get_value_and_holder());
694  return true;
695  }
696  // Case 2b: the python type inherits from multiple C++ bases. Check the bases to see if
697  // we can find an exact match (or, for a simple C++ type, an inherited match); if so, we
698  // can safely reinterpret_cast to the relevant pointer.
699  else if (bases.size() > 1) {
700  for (auto base : bases) {
701  if (no_cpp_mi ? PyType_IsSubtype(base->type, typeinfo->type) : base->type == typeinfo->type) {
702  this_.load_value(reinterpret_cast<instance *>(src.ptr())->get_value_and_holder(base));
703  return true;
704  }
705  }
706  }
707 
708  // Case 2c: C++ multiple inheritance is involved and we couldn't find an exact type match
709  // in the registered bases, above, so try implicit casting (needed for proper C++ casting
710  // when MI is involved).
711  if (this_.try_implicit_casts(src, convert))
712  return true;
713  }
714 
715  // Perform an implicit conversion
716  if (convert) {
717  for (auto &converter : typeinfo->implicit_conversions) {
718  auto temp = reinterpret_steal<object>(converter(src.ptr(), typeinfo->type));
719  if (load_impl<ThisT>(temp, false)) {
721  return true;
722  }
723  }
724  if (this_.try_direct_conversions(src))
725  return true;
726  }
727 
728  // Failed to match local typeinfo. Try again with global.
729  if (typeinfo->module_local) {
730  if (auto gtype = get_global_type_info(*typeinfo->cpptype)) {
731  typeinfo = gtype;
732  return load(src, false);
733  }
734  }
735 
736  // Global typeinfo has precedence over foreign module_local
737  return try_load_foreign_module_local(src);
738  }
739 
740 
741  // Called to do type lookup and wrap the pointer and type in a pair when a dynamic_cast
742  // isn't needed or can't be used. If the type is unknown, sets the error and returns a pair
743  // with .second = nullptr. (p.first = nullptr is not an error: it becomes None).
744  PYBIND11_NOINLINE static std::pair<const void *, const type_info *> src_and_type(
745  const void *src, const std::type_info &cast_type, const std::type_info *rtti_type = nullptr) {
746  if (auto *tpi = get_type_info(cast_type))
747  return {src, const_cast<const type_info *>(tpi)};
748 
749  // Not found, set error:
750  std::string tname = rtti_type ? rtti_type->name() : cast_type.name();
751  detail::clean_type_id(tname);
752  std::string msg = "Unregistered type : " + tname;
753  PyErr_SetString(PyExc_TypeError, msg.c_str());
754  return {nullptr, nullptr};
755  }
756 
757  const type_info *typeinfo = nullptr;
758  const std::type_info *cpptype = nullptr;
759  void *value = nullptr;
760 };
761 
769 template <typename T>
770 using cast_op_type =
772  typename std::add_pointer<intrinsic_t<T>>::type,
773  typename std::add_lvalue_reference<intrinsic_t<T>>::type>;
774 
782 template <typename T>
783 using movable_cast_op_type =
785  typename std::add_pointer<intrinsic_t<T>>::type,
787  typename std::add_rvalue_reference<intrinsic_t<T>>::type,
788  typename std::add_lvalue_reference<intrinsic_t<T>>::type>>;
789 
790 // std::is_copy_constructible isn't quite enough: it lets std::vector<T> (and similar) through when
791 // T is non-copyable, but code containing such a copy constructor fails to actually compile.
792 template <typename T, typename SFINAE = void> struct is_copy_constructible : std::is_copy_constructible<T> {};
793 
794 // Specialization for types that appear to be copy constructible but also look like stl containers
795 // (we specifically check for: has `value_type` and `reference` with `reference = value_type&`): if
796 // so, copy constructability depends on whether the value_type is copy constructible.
797 template <typename Container> struct is_copy_constructible<Container, enable_if_t<all_of<
798  std::is_copy_constructible<Container>,
799  std::is_same<typename Container::value_type &, typename Container::reference>,
800  // Avoid infinite recursion
801  negation<std::is_same<Container, typename Container::value_type>>
802  >::value>> : is_copy_constructible<typename Container::value_type> {};
803 
804 // Likewise for std::pair
805 // (after C++17 it is mandatory that the copy constructor not exist when the two types aren't themselves
806 // copy constructible, but this can not be relied upon when T1 or T2 are themselves containers).
807 template <typename T1, typename T2> struct is_copy_constructible<std::pair<T1, T2>>
808  : all_of<is_copy_constructible<T1>, is_copy_constructible<T2>> {};
809 
810 // The same problems arise with std::is_copy_assignable, so we use the same workaround.
811 template <typename T, typename SFINAE = void> struct is_copy_assignable : std::is_copy_assignable<T> {};
812 template <typename Container> struct is_copy_assignable<Container, enable_if_t<all_of<
813  std::is_copy_assignable<Container>,
814  std::is_same<typename Container::value_type &, typename Container::reference>
815  >::value>> : is_copy_assignable<typename Container::value_type> {};
816 template <typename T1, typename T2> struct is_copy_assignable<std::pair<T1, T2>>
817  : all_of<is_copy_assignable<T1>, is_copy_assignable<T2>> {};
818 
820 
821 // polymorphic_type_hook<itype>::get(src, tinfo) determines whether the object pointed
822 // to by `src` actually is an instance of some class derived from `itype`.
823 // If so, it sets `tinfo` to point to the std::type_info representing that derived
824 // type, and returns a pointer to the start of the most-derived object of that type
825 // (in which `src` is a subobject; this will be the same address as `src` in most
826 // single inheritance cases). If not, or if `src` is nullptr, it simply returns `src`
827 // and leaves `tinfo` at its default value of nullptr.
828 //
829 // The default polymorphic_type_hook just returns src. A specialization for polymorphic
830 // types determines the runtime type of the passed object and adjusts the this-pointer
831 // appropriately via dynamic_cast<void*>. This is what enables a C++ Animal* to appear
832 // to Python as a Dog (if Dog inherits from Animal, Animal is polymorphic, Dog is
833 // registered with pybind11, and this Animal is in fact a Dog).
834 //
835 // You may specialize polymorphic_type_hook yourself for types that want to appear
836 // polymorphic to Python but do not use C++ RTTI. (This is a not uncommon pattern
837 // in performance-sensitive applications, used most notably in LLVM.)
838 //
839 // polymorphic_type_hook_base allows users to specialize polymorphic_type_hook with
840 // std::enable_if. User provided specializations will always have higher priority than
841 // the default implementation and specialization provided in polymorphic_type_hook_base.
842 template <typename itype, typename SFINAE = void>
844 {
845  static const void *get(const itype *src, const std::type_info*&) { return src; }
846 };
847 template <typename itype>
848 struct polymorphic_type_hook_base<itype, detail::enable_if_t<std::is_polymorphic<itype>::value>>
849 {
850  static const void *get(const itype *src, const std::type_info*& type) {
851  type = src ? &typeid(*src) : nullptr;
852  return dynamic_cast<const void*>(src);
853  }
854 };
855 template <typename itype, typename SFINAE = void>
857 
859 
860 template <typename type> class type_caster_base : public type_caster_generic {
863 
864 public:
865  static constexpr auto name = _<type>();
866 
868  explicit type_caster_base(const std::type_info &info) : type_caster_generic(info) { }
869 
870  static handle cast(const itype &src, return_value_policy policy, handle parent) {
872  policy = return_value_policy::copy;
873  return cast(&src, policy, parent);
874  }
875 
876  static handle cast(itype &&src, return_value_policy, handle parent) {
877  return cast(&src, return_value_policy::move, parent);
878  }
879 
880  // Returns a (pointer, type_info) pair taking care of necessary type lookup for a
881  // polymorphic type (using RTTI by default, but can be overridden by specializing
882  // polymorphic_type_hook). If the instance isn't derived, returns the base version.
883  static std::pair<const void *, const type_info *> src_and_type(const itype *src) {
884  auto &cast_type = typeid(itype);
885  const std::type_info *instance_type = nullptr;
886  const void *vsrc = polymorphic_type_hook<itype>::get(src, instance_type);
887  if (instance_type && !same_type(cast_type, *instance_type)) {
888  // This is a base pointer to a derived type. If the derived type is registered
889  // with pybind11, we want to make the full derived object available.
890  // In the typical case where itype is polymorphic, we get the correct
891  // derived pointer (which may be != base pointer) by a dynamic_cast to
892  // most derived type. If itype is not polymorphic, we won't get here
893  // except via a user-provided specialization of polymorphic_type_hook,
894  // and the user has promised that no this-pointer adjustment is
895  // required in that case, so it's OK to use static_cast.
896  if (const auto *tpi = get_type_info(*instance_type))
897  return {vsrc, tpi};
898  }
899  // Otherwise we have either a nullptr, an `itype` pointer, or an unknown derived pointer, so
900  // don't do a cast
901  return type_caster_generic::src_and_type(src, cast_type, instance_type);
902  }
903 
904  static handle cast(const itype *src, return_value_policy policy, handle parent) {
905  auto st = src_and_type(src);
907  st.first, policy, parent, st.second,
908  make_copy_constructor(src), make_move_constructor(src));
909  }
910 
911  static handle cast_holder(const itype *src, const void *holder) {
912  auto st = src_and_type(src);
914  st.first, return_value_policy::take_ownership, {}, st.second,
915  nullptr, nullptr, holder);
916  }
917 
918  template <typename T> using cast_op_type = detail::cast_op_type<T>;
919 
920  operator itype*() { return (type *) value; }
921  operator itype&() { if (!value) throw reference_cast_error(); return *((itype *) value); }
922 
923 protected:
924  using Constructor = void *(*)(const void *);
925 
926  /* Only enabled when the types are {copy,move}-constructible *and* when the type
927  does not have a private operator new implementation. */
929  static auto make_copy_constructor(const T *x) -> decltype(new T(*x), Constructor{}) {
930  return [](const void *arg) -> void * {
931  return new T(*reinterpret_cast<const T *>(arg));
932  };
933  }
934 
936  static auto make_move_constructor(const T *x) -> decltype(new T(std::move(*const_cast<T *>(x))), Constructor{}) {
937  return [](const void *arg) -> void * {
938  return new T(std::move(*const_cast<T *>(reinterpret_cast<const T *>(arg))));
939  };
940  }
941 
942  static Constructor make_copy_constructor(...) { return nullptr; }
943  static Constructor make_move_constructor(...) { return nullptr; }
944 };
945 
946 template <typename type, typename SFINAE = void> class type_caster : public type_caster_base<type> { };
947 template <typename type> using make_caster = type_caster<intrinsic_t<type>>;
948 
949 // Shortcut for calling a caster's `cast_op_type` cast operator for casting a type_caster to a T
950 template <typename T> typename make_caster<T>::template cast_op_type<T> cast_op(make_caster<T> &caster) {
951  return caster.operator typename make_caster<T>::template cast_op_type<T>();
952 }
955  return std::move(caster).operator
957 }
958 
959 template <typename type> class type_caster<std::reference_wrapper<type>> {
960 private:
963  using subcaster_cast_op_type = typename caster_t::template cast_op_type<type>;
964  static_assert(std::is_same<typename std::remove_const<type>::type &, subcaster_cast_op_type>::value,
965  "std::reference_wrapper<T> caster requires T to have a caster with an `T &` operator");
966 public:
967  bool load(handle src, bool convert) { return subcaster.load(src, convert); }
968  static constexpr auto name = caster_t::name;
969  static handle cast(const std::reference_wrapper<type> &src, return_value_policy policy, handle parent) {
970  // It is definitely wrong to take ownership of this pointer, so mask that rvp
973  return caster_t::cast(&src.get(), policy, parent);
974  }
975  template <typename T> using cast_op_type = std::reference_wrapper<type>;
976  operator std::reference_wrapper<type>() { return subcaster.operator subcaster_cast_op_type&(); }
977 };
978 
979 #define PYBIND11_TYPE_CASTER(type, py_name) \
980  protected: \
981  type value; \
982  public: \
983  static constexpr auto name = py_name; \
984  template <typename T_, enable_if_t<std::is_same<type, remove_cv_t<T_>>::value, int> = 0> \
985  static handle cast(T_ *src, return_value_policy policy, handle parent) { \
986  if (!src) return none().release(); \
987  if (policy == return_value_policy::take_ownership) { \
988  auto h = cast(std::move(*src), policy, parent); delete src; return h; \
989  } else { \
990  return cast(*src, policy, parent); \
991  } \
992  } \
993  operator type*() { return &value; } \
994  operator type&() { return value; } \
995  operator type&&() && { return std::move(value); } \
996  template <typename T_> using cast_op_type = pybind11::detail::movable_cast_op_type<T_>
997 
998 
999 template <typename CharT> using is_std_char_type = any_of<
1000  std::is_same<CharT, char>, /* std::string */
1001 #if defined(PYBIND11_HAS_U8STRING)
1002  std::is_same<CharT, char8_t>, /* std::u8string */
1003 #endif
1004  std::is_same<CharT, char16_t>, /* std::u16string */
1005  std::is_same<CharT, char32_t>, /* std::u32string */
1006  std::is_same<CharT, wchar_t> /* std::wstring */
1007 >;
1008 
1009 
1010 template <typename T>
1011 struct type_caster<T, enable_if_t<std::is_arithmetic<T>::value && !is_std_char_type<T>::value>> {
1015 public:
1016 
1017  bool load(handle src, bool convert) {
1018  py_type py_value;
1019 
1020  if (!src)
1021  return false;
1022 
1024  if (convert || PyFloat_Check(src.ptr()))
1025  py_value = (py_type) PyFloat_AsDouble(src.ptr());
1026  else
1027  return false;
1028  } else if (PyFloat_Check(src.ptr())) {
1029  return false;
1030  } else if (std::is_unsigned<py_type>::value) {
1031  py_value = as_unsigned<py_type>(src.ptr());
1032  } else { // signed integer:
1033  py_value = sizeof(T) <= sizeof(long)
1034  ? (py_type) PyLong_AsLong(src.ptr())
1036  }
1037 
1038  // Python API reported an error
1039  bool py_err = py_value == (py_type) -1 && PyErr_Occurred();
1040 
1041  // Check to see if the conversion is valid (integers should match exactly)
1042  // Signed/unsigned checks happen elsewhere
1043  if (py_err || (std::is_integral<T>::value && sizeof(py_type) != sizeof(T) && py_value != (py_type) (T) py_value)) {
1044  bool type_error = py_err && PyErr_ExceptionMatches(
1045 #if PY_VERSION_HEX < 0x03000000 && !defined(PYPY_VERSION)
1046  PyExc_SystemError
1047 #else
1048  PyExc_TypeError
1049 #endif
1050  );
1051  PyErr_Clear();
1052  if (type_error && convert && PyNumber_Check(src.ptr())) {
1053  auto tmp = reinterpret_steal<object>(std::is_floating_point<T>::value
1054  ? PyNumber_Float(src.ptr())
1055  : PyNumber_Long(src.ptr()));
1056  PyErr_Clear();
1057  return load(tmp, false);
1058  }
1059  return false;
1060  }
1061 
1062  value = (T) py_value;
1063  return true;
1064  }
1065 
1066  template<typename U = T>
1068  cast(U src, return_value_policy /* policy */, handle /* parent */) {
1069  return PyFloat_FromDouble((double) src);
1070  }
1071 
1072  template<typename U = T>
1073  static typename std::enable_if<!std::is_floating_point<U>::value && std::is_signed<U>::value && (sizeof(U) <= sizeof(long)), handle>::type
1074  cast(U src, return_value_policy /* policy */, handle /* parent */) {
1075  return PYBIND11_LONG_FROM_SIGNED((long) src);
1076  }
1077 
1078  template<typename U = T>
1079  static typename std::enable_if<!std::is_floating_point<U>::value && std::is_unsigned<U>::value && (sizeof(U) <= sizeof(unsigned long)), handle>::type
1080  cast(U src, return_value_policy /* policy */, handle /* parent */) {
1081  return PYBIND11_LONG_FROM_UNSIGNED((unsigned long) src);
1082  }
1083 
1084  template<typename U = T>
1085  static typename std::enable_if<!std::is_floating_point<U>::value && std::is_signed<U>::value && (sizeof(U) > sizeof(long)), handle>::type
1086  cast(U src, return_value_policy /* policy */, handle /* parent */) {
1087  return PyLong_FromLongLong((long long) src);
1088  }
1089 
1090  template<typename U = T>
1091  static typename std::enable_if<!std::is_floating_point<U>::value && std::is_unsigned<U>::value && (sizeof(U) > sizeof(unsigned long)), handle>::type
1092  cast(U src, return_value_policy /* policy */, handle /* parent */) {
1093  return PyLong_FromUnsignedLongLong((unsigned long long) src);
1094  }
1095 
1097 };
1098 
1099 template<typename T> struct void_caster {
1100 public:
1101  bool load(handle src, bool) {
1102  if (src && src.is_none())
1103  return true;
1104  return false;
1105  }
1106  static handle cast(T, return_value_policy /* policy */, handle /* parent */) {
1107  return none().inc_ref();
1108  }
1109  PYBIND11_TYPE_CASTER(T, _("None"));
1110 };
1111 
1112 template <> class type_caster<void_type> : public void_caster<void_type> {};
1113 
1114 template <> class type_caster<void> : public type_caster<void_type> {
1115 public:
1117 
1118  bool load(handle h, bool) {
1119  if (!h) {
1120  return false;
1121  } else if (h.is_none()) {
1122  value = nullptr;
1123  return true;
1124  }
1125 
1126  /* Check if this is a capsule */
1127  if (isinstance<capsule>(h)) {
1128  value = reinterpret_borrow<capsule>(h);
1129  return true;
1130  }
1131 
1132  /* Check if this is a C++ type */
1133  auto &bases = all_type_info((PyTypeObject *) type::handle_of(h).ptr());
1134  if (bases.size() == 1) { // Only allowing loading from a single-value type
1135  value = values_and_holders(reinterpret_cast<instance *>(h.ptr())).begin()->value_ptr();
1136  return true;
1137  }
1138 
1139  /* Fail */
1140  return false;
1141  }
1142 
1143  static handle cast(const void *ptr, return_value_policy /* policy */, handle /* parent */) {
1144  if (ptr)
1145  return capsule(ptr).release();
1146  else
1147  return none().inc_ref();
1148  }
1149 
1150  template <typename T> using cast_op_type = void*&;
1151  operator void *&() { return value; }
1152  static constexpr auto name = _("capsule");
1153 private:
1154  void *value = nullptr;
1155 };
1156 
1157 template <> class type_caster<std::nullptr_t> : public void_caster<std::nullptr_t> { };
1158 
1159 template <> class type_caster<bool> {
1160 public:
1161  bool load(handle src, bool convert) {
1162  if (!src) return false;
1163  else if (src.ptr() == Py_True) { value = true; return true; }
1164  else if (src.ptr() == Py_False) { value = false; return true; }
1165  else if (convert || !strcmp("numpy.bool_", Py_TYPE(src.ptr())->tp_name)) {
1166  // (allow non-implicit conversion for numpy booleans)
1167 
1168  Py_ssize_t res = -1;
1169  if (src.is_none()) {
1170  res = 0; // None is implicitly converted to False
1171  }
1172  #if defined(PYPY_VERSION)
1173  // On PyPy, check that "__bool__" (or "__nonzero__" on Python 2.7) attr exists
1174  else if (hasattr(src, PYBIND11_BOOL_ATTR)) {
1175  res = PyObject_IsTrue(src.ptr());
1176  }
1177  #else
1178  // Alternate approach for CPython: this does the same as the above, but optimized
1179  // using the CPython API so as to avoid an unneeded attribute lookup.
1180  else if (auto tp_as_number = src.ptr()->ob_type->tp_as_number) {
1181  if (PYBIND11_NB_BOOL(tp_as_number)) {
1182  res = (*PYBIND11_NB_BOOL(tp_as_number))(src.ptr());
1183  }
1184  }
1185  #endif
1186  if (res == 0 || res == 1) {
1187  value = (bool) res;
1188  return true;
1189  } else {
1190  PyErr_Clear();
1191  }
1192  }
1193  return false;
1194  }
1195  static handle cast(bool src, return_value_policy /* policy */, handle /* parent */) {
1196  return handle(src ? Py_True : Py_False).inc_ref();
1197  }
1198  PYBIND11_TYPE_CASTER(bool, _("bool"));
1199 };
1200 
1201 // Helper class for UTF-{8,16,32} C++ stl strings:
1202 template <typename StringType, bool IsView = false> struct string_caster {
1203  using CharT = typename StringType::value_type;
1204 
1205  // Simplify life by being able to assume standard char sizes (the standard only guarantees
1206  // minimums, but Python requires exact sizes)
1207  static_assert(!std::is_same<CharT, char>::value || sizeof(CharT) == 1, "Unsupported char size != 1");
1208 #if defined(PYBIND11_HAS_U8STRING)
1209  static_assert(!std::is_same<CharT, char8_t>::value || sizeof(CharT) == 1, "Unsupported char8_t size != 1");
1210 #endif
1211  static_assert(!std::is_same<CharT, char16_t>::value || sizeof(CharT) == 2, "Unsupported char16_t size != 2");
1212  static_assert(!std::is_same<CharT, char32_t>::value || sizeof(CharT) == 4, "Unsupported char32_t size != 4");
1213  // wchar_t can be either 16 bits (Windows) or 32 (everywhere else)
1214  static_assert(!std::is_same<CharT, wchar_t>::value || sizeof(CharT) == 2 || sizeof(CharT) == 4,
1215  "Unsupported wchar_t size != 2/4");
1216  static constexpr size_t UTF_N = 8 * sizeof(CharT);
1217 
1218  bool load(handle src, bool) {
1219 #if PY_MAJOR_VERSION < 3
1220  object temp;
1221 #endif
1222  handle load_src = src;
1223  if (!src) {
1224  return false;
1225  } else if (!PyUnicode_Check(load_src.ptr())) {
1226 #if PY_MAJOR_VERSION >= 3
1227  return load_bytes(load_src);
1228 #else
1230  return load_bytes(load_src);
1231  }
1232 
1233  // The below is a guaranteed failure in Python 3 when PyUnicode_Check returns false
1234  if (!PYBIND11_BYTES_CHECK(load_src.ptr()))
1235  return false;
1236 
1237  temp = reinterpret_steal<object>(PyUnicode_FromObject(load_src.ptr()));
1238  if (!temp) { PyErr_Clear(); return false; }
1239  load_src = temp;
1240 #endif
1241  }
1242 
1243  object utfNbytes = reinterpret_steal<object>(PyUnicode_AsEncodedString(
1244  load_src.ptr(), UTF_N == 8 ? "utf-8" : UTF_N == 16 ? "utf-16" : "utf-32", nullptr));
1245  if (!utfNbytes) { PyErr_Clear(); return false; }
1246 
1247  const auto *buffer = reinterpret_cast<const CharT *>(PYBIND11_BYTES_AS_STRING(utfNbytes.ptr()));
1248  size_t length = (size_t) PYBIND11_BYTES_SIZE(utfNbytes.ptr()) / sizeof(CharT);
1249  if (UTF_N > 8) { buffer++; length--; } // Skip BOM for UTF-16/32
1250  value = StringType(buffer, length);
1251 
1252  // If we're loading a string_view we need to keep the encoded Python object alive:
1253  if (IsView)
1255 
1256  return true;
1257  }
1258 
1259  static handle cast(const StringType &src, return_value_policy /* policy */, handle /* parent */) {
1260  const char *buffer = reinterpret_cast<const char *>(src.data());
1261  auto nbytes = ssize_t(src.size() * sizeof(CharT));
1262  handle s = decode_utfN(buffer, nbytes);
1263  if (!s) throw error_already_set();
1264  return s;
1265  }
1266 
1268 
1269 private:
1270  static handle decode_utfN(const char *buffer, ssize_t nbytes) {
1271 #if !defined(PYPY_VERSION)
1272  return
1273  UTF_N == 8 ? PyUnicode_DecodeUTF8(buffer, nbytes, nullptr) :
1274  UTF_N == 16 ? PyUnicode_DecodeUTF16(buffer, nbytes, nullptr, nullptr) :
1275  PyUnicode_DecodeUTF32(buffer, nbytes, nullptr, nullptr);
1276 #else
1277  // PyPy seems to have multiple problems related to PyUnicode_UTF*: the UTF8 version
1278  // sometimes segfaults for unknown reasons, while the UTF16 and 32 versions require a
1279  // non-const char * arguments, which is also a nuisance, so bypass the whole thing by just
1280  // passing the encoding as a string value, which works properly:
1281  return PyUnicode_Decode(buffer, nbytes, UTF_N == 8 ? "utf-8" : UTF_N == 16 ? "utf-16" : "utf-32", nullptr);
1282 #endif
1283  }
1284 
1285  // When loading into a std::string or char*, accept a bytes object as-is (i.e.
1286  // without any encoding/decoding attempt). For other C++ char sizes this is a no-op.
1287  // which supports loading a unicode from a str, doesn't take this path.
1288  template <typename C = CharT>
1290  if (PYBIND11_BYTES_CHECK(src.ptr())) {
1291  // We were passed a Python 3 raw bytes; accept it into a std::string or char*
1292  // without any encoding attempt.
1293  const char *bytes = PYBIND11_BYTES_AS_STRING(src.ptr());
1294  if (bytes) {
1295  value = StringType(bytes, (size_t) PYBIND11_BYTES_SIZE(src.ptr()));
1296  return true;
1297  }
1298  }
1299 
1300  return false;
1301  }
1302 
1303  template <typename C = CharT>
1305 };
1306 
1307 template <typename CharT, class Traits, class Allocator>
1308 struct type_caster<std::basic_string<CharT, Traits, Allocator>, enable_if_t<is_std_char_type<CharT>::value>>
1309  : string_caster<std::basic_string<CharT, Traits, Allocator>> {};
1310 
1311 #ifdef PYBIND11_HAS_STRING_VIEW
1312 template <typename CharT, class Traits>
1313 struct type_caster<std::basic_string_view<CharT, Traits>, enable_if_t<is_std_char_type<CharT>::value>>
1314  : string_caster<std::basic_string_view<CharT, Traits>, true> {};
1315 #endif
1316 
1317 // Type caster for C-style strings. We basically use a std::string type caster, but also add the
1318 // ability to use None as a nullptr char* (which the string caster doesn't allow).
1319 template <typename CharT> struct type_caster<CharT, enable_if_t<is_std_char_type<CharT>::value>> {
1320  using StringType = std::basic_string<CharT>;
1323  bool none = false;
1324  CharT one_char = 0;
1325 public:
1326  bool load(handle src, bool convert) {
1327  if (!src) return false;
1328  if (src.is_none()) {
1329  // Defer accepting None to other overloads (if we aren't in convert mode):
1330  if (!convert) return false;
1331  none = true;
1332  return true;
1333  }
1334  return str_caster.load(src, convert);
1335  }
1336 
1337  static handle cast(const CharT *src, return_value_policy policy, handle parent) {
1338  if (src == nullptr) return pybind11::none().inc_ref();
1339  return StringCaster::cast(StringType(src), policy, parent);
1340  }
1341 
1342  static handle cast(CharT src, return_value_policy policy, handle parent) {
1344  handle s = PyUnicode_DecodeLatin1((const char *) &src, 1, nullptr);
1345  if (!s) throw error_already_set();
1346  return s;
1347  }
1348  return StringCaster::cast(StringType(1, src), policy, parent);
1349  }
1350 
1351  operator CharT*() { return none ? nullptr : const_cast<CharT *>(static_cast<StringType &>(str_caster).c_str()); }
1352  operator CharT&() {
1353  if (none)
1354  throw value_error("Cannot convert None to a character");
1355 
1356  auto &value = static_cast<StringType &>(str_caster);
1357  size_t str_len = value.size();
1358  if (str_len == 0)
1359  throw value_error("Cannot convert empty string to a character");
1360 
1361  // If we're in UTF-8 mode, we have two possible failures: one for a unicode character that
1362  // is too high, and one for multiple unicode characters (caught later), so we need to figure
1363  // out how long the first encoded character is in bytes to distinguish between these two
1364  // errors. We also allow want to allow unicode characters U+0080 through U+00FF, as those
1365  // can fit into a single char value.
1366  if (StringCaster::UTF_N == 8 && str_len > 1 && str_len <= 4) {
1367  auto v0 = static_cast<unsigned char>(value[0]);
1368  size_t char0_bytes = !(v0 & 0x80) ? 1 : // low bits only: 0-127
1369  (v0 & 0xE0) == 0xC0 ? 2 : // 0b110xxxxx - start of 2-byte sequence
1370  (v0 & 0xF0) == 0xE0 ? 3 : // 0b1110xxxx - start of 3-byte sequence
1371  4; // 0b11110xxx - start of 4-byte sequence
1372 
1373  if (char0_bytes == str_len) {
1374  // If we have a 128-255 value, we can decode it into a single char:
1375  if (char0_bytes == 2 && (v0 & 0xFC) == 0xC0) { // 0x110000xx 0x10xxxxxx
1376  one_char = static_cast<CharT>(((v0 & 3) << 6) + (static_cast<unsigned char>(value[1]) & 0x3F));
1377  return one_char;
1378  }
1379  // Otherwise we have a single character, but it's > U+00FF
1380  throw value_error("Character code point not in range(0x100)");
1381  }
1382  }
1383 
1384  // UTF-16 is much easier: we can only have a surrogate pair for values above U+FFFF, thus a
1385  // surrogate pair with total length 2 instantly indicates a range error (but not a "your
1386  // string was too long" error).
1387  else if (StringCaster::UTF_N == 16 && str_len == 2) {
1388  one_char = static_cast<CharT>(value[0]);
1389  if (one_char >= 0xD800 && one_char < 0xE000)
1390  throw value_error("Character code point not in range(0x10000)");
1391  }
1392 
1393  if (str_len != 1)
1394  throw value_error("Expected a character, but multi-character string found");
1395 
1396  one_char = value[0];
1397  return one_char;
1398  }
1399 
1400  static constexpr auto name = _(PYBIND11_STRING_NAME);
1401  template <typename _T> using cast_op_type = pybind11::detail::cast_op_type<_T>;
1402 };
1403 
1404 // Base implementation for std::tuple and std::pair
1405 template <template<typename...> class Tuple, typename... Ts> class tuple_caster {
1406  using type = Tuple<Ts...>;
1407  static constexpr auto size = sizeof...(Ts);
1409 public:
1410 
1411  bool load(handle src, bool convert) {
1412  if (!isinstance<sequence>(src))
1413  return false;
1414  const auto seq = reinterpret_borrow<sequence>(src);
1415  if (seq.size() != size)
1416  return false;
1417  return load_impl(seq, convert, indices{});
1418  }
1419 
1420  template <typename T>
1421  static handle cast(T &&src, return_value_policy policy, handle parent) {
1422  return cast_impl(std::forward<T>(src), policy, parent, indices{});
1423  }
1424 
1425  // copied from the PYBIND11_TYPE_CASTER macro
1426  template <typename T>
1427  static handle cast(T *src, return_value_policy policy, handle parent) {
1428  if (!src) return none().release();
1429  if (policy == return_value_policy::take_ownership) {
1430  auto h = cast(std::move(*src), policy, parent); delete src; return h;
1431  } else {
1432  return cast(*src, policy, parent);
1433  }
1434  }
1435 
1436  static constexpr auto name = _("Tuple[") + concat(make_caster<Ts>::name...) + _("]");
1437 
1438  template <typename T> using cast_op_type = type;
1439 
1440  operator type() & { return implicit_cast(indices{}); }
1441  operator type() && { return std::move(*this).implicit_cast(indices{}); }
1442 
1443 protected:
1444  template <size_t... Is>
1445  type implicit_cast(index_sequence<Is...>) & { return type(cast_op<Ts>(std::get<Is>(subcasters))...); }
1446  template <size_t... Is>
1447  type implicit_cast(index_sequence<Is...>) && { return type(cast_op<Ts>(std::move(std::get<Is>(subcasters)))...); }
1448 
1449  static constexpr bool load_impl(const sequence &, bool, index_sequence<>) { return true; }
1450 
1451  template <size_t... Is>
1453 #ifdef __cpp_fold_expressions
1454  if ((... || !std::get<Is>(subcasters).load(seq[Is], convert)))
1455  return false;
1456 #else
1457  for (bool r : {std::get<Is>(subcasters).load(seq[Is], convert)...})
1458  if (!r)
1459  return false;
1460 #endif
1461  return true;
1462  }
1463 
1464  /* Implementation: Convert a C++ tuple into a Python tuple */
1465  template <typename T, size_t... Is>
1467  std::array<object, size> entries{{
1468  reinterpret_steal<object>(make_caster<Ts>::cast(std::get<Is>(std::forward<T>(src)), policy, parent))...
1469  }};
1470  for (const auto &entry: entries)
1471  if (!entry)
1472  return handle();
1473  tuple result(size);
1474  int counter = 0;
1475  for (auto & entry: entries)
1476  PyTuple_SET_ITEM(result.ptr(), counter++, entry.release().ptr());
1477  return result.release();
1478  }
1479 
1480  Tuple<make_caster<Ts>...> subcasters;
1481 };
1482 
1483 template <typename T1, typename T2> class type_caster<std::pair<T1, T2>>
1484  : public tuple_caster<std::pair, T1, T2> {};
1485 
1486 template <typename... Ts> class type_caster<std::tuple<Ts...>>
1487  : public tuple_caster<std::tuple, Ts...> {};
1488 
1491 template <typename T>
1493  static auto get(const T &p) -> decltype(p.get()) { return p.get(); }
1494 };
1495 
1497 template <typename type, typename holder_type>
1499 public:
1501  static_assert(std::is_base_of<base, type_caster<type>>::value,
1502  "Holder classes are only supported for custom types");
1503  using base::base;
1504  using base::cast;
1505  using base::typeinfo;
1506  using base::value;
1507 
1508  bool load(handle src, bool convert) {
1509  return base::template load_impl<copyable_holder_caster<type, holder_type>>(src, convert);
1510  }
1511 
1512  explicit operator type*() { return this->value; }
1513  // static_cast works around compiler error with MSVC 17 and CUDA 10.2
1514  // see issue #2180
1515  explicit operator type&() { return *(static_cast<type *>(this->value)); }
1516  explicit operator holder_type*() { return std::addressof(holder); }
1517 
1518  // Workaround for Intel compiler bug
1519  // see pybind11 issue 94
1520  #if defined(__ICC) || defined(__INTEL_COMPILER)
1521  operator holder_type&() { return holder; }
1522  #else
1523  explicit operator holder_type&() { return holder; }
1524  #endif
1525 
1526  static handle cast(const holder_type &src, return_value_policy, handle) {
1527  const auto *ptr = holder_helper<holder_type>::get(src);
1529  }
1530 
1531 protected:
1532  friend class type_caster_generic;
1534  if (typeinfo->default_holder)
1535  throw cast_error("Unable to load a custom holder type from a default-holder instance");
1536  }
1537 
1539  if (v_h.holder_constructed()) {
1540  value = v_h.value_ptr();
1541  holder = v_h.template holder<holder_type>();
1542  return true;
1543  } else {
1544  throw cast_error("Unable to cast from non-held to held instance (T& to Holder<T>) "
1545 #if defined(NDEBUG)
1546  "(compile in debug mode for type information)");
1547 #else
1548  "of type '" + type_id<holder_type>() + "''");
1549 #endif
1550  }
1551  }
1552 
1554  bool try_implicit_casts(handle, bool) { return false; }
1555 
1558  for (auto &cast : typeinfo->implicit_casts) {
1559  copyable_holder_caster sub_caster(*cast.first);
1560  if (sub_caster.load(src, convert)) {
1561  value = cast.second(sub_caster.value);
1562  holder = holder_type(sub_caster.holder, (type *) value);
1563  return true;
1564  }
1565  }
1566  return false;
1567  }
1568 
1569  static bool try_direct_conversions(handle) { return false; }
1570 
1571 
1572  holder_type holder;
1573 };
1574 
1576 template <typename T>
1577 class type_caster<std::shared_ptr<T>> : public copyable_holder_caster<T, std::shared_ptr<T>> { };
1578 
1579 template <typename type, typename holder_type>
1581  static_assert(std::is_base_of<type_caster_base<type>, type_caster<type>>::value,
1582  "Holder classes are only supported for custom types");
1583 
1584  static handle cast(holder_type &&src, return_value_policy, handle) {
1585  auto *ptr = holder_helper<holder_type>::get(src);
1586  return type_caster_base<type>::cast_holder(ptr, std::addressof(src));
1587  }
1588  static constexpr auto name = type_caster_base<type>::name;
1589 };
1590 
1591 template <typename type, typename deleter>
1592 class type_caster<std::unique_ptr<type, deleter>>
1593  : public move_only_holder_caster<type, std::unique_ptr<type, deleter>> { };
1594 
1595 template <typename type, typename holder_type>
1599 
1600 template <typename T, bool Value = false> struct always_construct_holder { static constexpr bool value = Value; };
1601 
1603 #define PYBIND11_DECLARE_HOLDER_TYPE(type, holder_type, ...) \
1604  namespace pybind11 { namespace detail { \
1605  template <typename type> \
1606  struct always_construct_holder<holder_type> : always_construct_holder<void, ##__VA_ARGS__> { }; \
1607  template <typename type> \
1608  class type_caster<holder_type, enable_if_t<!is_shared_ptr<holder_type>::value>> \
1609  : public type_caster_holder<type, holder_type> { }; \
1610  }}
1611 
1612 // PYBIND11_DECLARE_HOLDER_TYPE holder types:
1613 template <typename base, typename holder> struct is_holder_type :
1614  std::is_base_of<detail::type_caster_holder<base, holder>, detail::type_caster<holder>> {};
1615 // Specialization for always-supported unique_ptr holders:
1616 template <typename base, typename deleter> struct is_holder_type<base, std::unique_ptr<base, deleter>> :
1617  std::true_type {};
1618 
1619 template <typename T> struct handle_type_name { static constexpr auto name = _<T>(); };
1620 template <> struct handle_type_name<bytes> { static constexpr auto name = _(PYBIND11_BYTES_NAME); };
1621 template <> struct handle_type_name<int_> { static constexpr auto name = _("int"); };
1622 template <> struct handle_type_name<iterable> { static constexpr auto name = _("Iterable"); };
1623 template <> struct handle_type_name<iterator> { static constexpr auto name = _("Iterator"); };
1624 template <> struct handle_type_name<none> { static constexpr auto name = _("None"); };
1625 template <> struct handle_type_name<args> { static constexpr auto name = _("*args"); };
1626 template <> struct handle_type_name<kwargs> { static constexpr auto name = _("**kwargs"); };
1627 
1628 template <typename type>
1631  bool load(handle src, bool /* convert */) { value = src; return static_cast<bool>(value); }
1632 
1634  bool load(handle src, bool /* convert */) {
1635  if (!isinstance<type>(src))
1636  return false;
1637  value = reinterpret_borrow<type>(src);
1638  return true;
1639  }
1640 
1641  static handle cast(const handle &src, return_value_policy /* policy */, handle /* parent */) {
1642  return src.inc_ref();
1643  }
1645 };
1646 
1647 template <typename T>
1649 
1650 // Our conditions for enabling moving are quite restrictive:
1651 // At compile time:
1652 // - T needs to be a non-const, non-pointer, non-reference type
1653 // - type_caster<T>::operator T&() must exist
1654 // - the type must be move constructible (obviously)
1655 // At run-time:
1656 // - if the type is non-copy-constructible, the object must be the sole owner of the type (i.e. it
1657 // must have ref_count() == 1)h
1658 // If any of the above are not satisfied, we fall back to copying.
1659 template <typename T> using move_is_plain_type = satisfies_none_of<T,
1660  std::is_void, std::is_pointer, std::is_reference, std::is_const
1661 >;
1662 template <typename T, typename SFINAE = void> struct move_always : std::false_type {};
1663 template <typename T> struct move_always<T, enable_if_t<all_of<
1664  move_is_plain_type<T>,
1666  std::is_move_constructible<T>,
1667  std::is_same<decltype(std::declval<make_caster<T>>().operator T&()), T&>
1668 >::value>> : std::true_type {};
1669 template <typename T, typename SFINAE = void> struct move_if_unreferenced : std::false_type {};
1670 template <typename T> struct move_if_unreferenced<T, enable_if_t<all_of<
1671  move_is_plain_type<T>,
1672  negation<move_always<T>>,
1673  std::is_move_constructible<T>,
1674  std::is_same<decltype(std::declval<make_caster<T>>().operator T&()), T&>
1675 >::value>> : std::true_type {};
1677 
1678 // Detect whether returning a `type` from a cast on type's type_caster is going to result in a
1679 // reference or pointer to a local variable of the type_caster. Basically, only
1680 // non-reference/pointer `type`s and reference/pointers from a type_caster_generic are safe;
1681 // everything else returns a reference/pointer to a local variable.
1682 template <typename type> using cast_is_temporary_value_reference = bool_constant<
1684  !std::is_base_of<type_caster_generic, make_caster<type>>::value &&
1685  !std::is_same<intrinsic_t<type>, void>::value
1686 >;
1687 
1688 // When a value returned from a C++ function is being cast back to Python, we almost always want to
1689 // force `policy = move`, regardless of the return value policy the function/method was declared
1690 // with.
1691 template <typename Return, typename SFINAE = void> struct return_value_policy_override {
1693 };
1694 
1695 template <typename Return> struct return_value_policy_override<Return,
1696  detail::enable_if_t<std::is_base_of<type_caster_generic, make_caster<Return>>::value, void>> {
1701  }
1702 };
1703 
1704 // Basic python -> C++ casting; throws if casting fails
1705 template <typename T, typename SFINAE> type_caster<T, SFINAE> &load_type(type_caster<T, SFINAE> &conv, const handle &handle) {
1706  if (!conv.load(handle, true)) {
1707 #if defined(NDEBUG)
1708  throw cast_error("Unable to cast Python instance to C++ type (compile in debug mode for details)");
1709 #else
1710  throw cast_error("Unable to cast Python instance of type " +
1711  (std::string) str(type::handle_of(handle)) + " to C++ type '" + type_id<T>() + "'");
1712 #endif
1713  }
1714  return conv;
1715 }
1716 // Wrapper around the above that also constructs and returns a type_caster
1717 template <typename T> make_caster<T> load_type(const handle &handle) {
1718  make_caster<T> conv;
1719  load_type(conv, handle);
1720  return conv;
1721 }
1722 
1724 
1725 // pytype -> C++ type
1727 T cast(const handle &handle) {
1728  using namespace detail;
1730  "Unable to cast type to reference: value is local to type caster");
1731  return cast_op<T>(load_type<T>(handle));
1732 }
1733 
1734 // pytype -> pytype (calls converting constructor)
1736 T cast(const handle &handle) { return T(reinterpret_borrow<object>(handle)); }
1737 
1738 // C++ type -> py::object
1741  handle parent = handle()) {
1742  using no_ref_T = typename std::remove_reference<T>::type;
1743  if (policy == return_value_policy::automatic)
1746  else if (policy == return_value_policy::automatic_reference)
1749  return reinterpret_steal<object>(detail::make_caster<T>::cast(std::forward<T>(value), policy, parent));
1750 }
1751 
1752 template <typename T> T handle::cast() const { return pybind11::cast<T>(*this); }
1753 template <> inline void handle::cast() const { return; }
1754 
1755 template <typename T>
1757  if (obj.ref_count() > 1)
1758 #if defined(NDEBUG)
1759  throw cast_error("Unable to cast Python instance to C++ rvalue: instance has multiple references"
1760  " (compile in debug mode for details)");
1761 #else
1762  throw cast_error("Unable to move from Python " + (std::string) str(type::handle_of(obj)) +
1763  " instance to C++ " + type_id<T>() + " instance: instance has multiple references");
1764 #endif
1765 
1766  // Move into a temporary and return that, because the reference may be a local value of `conv`
1767  T ret = std::move(detail::load_type<T>(obj).operator T&());
1768  return ret;
1769 }
1770 
1771 // Calling cast() on an rvalue calls pybind11::cast with the object rvalue, which does:
1772 // - If we have to move (because T has no copy constructor), do it. This will fail if the moved
1773 // object has multiple references, but trying to copy will fail to compile.
1774 // - If both movable and copyable, check ref count: if 1, move; otherwise copy
1775 // - Otherwise (not movable), copy.
1776 template <typename T> detail::enable_if_t<detail::move_always<T>::value, T> cast(object &&object) {
1777  return move<T>(std::move(object));
1778 }
1779 template <typename T> detail::enable_if_t<detail::move_if_unreferenced<T>::value, T> cast(object &&object) {
1780  if (object.ref_count() > 1)
1781  return cast<T>(object);
1782  else
1783  return move<T>(std::move(object));
1784 }
1785 template <typename T> detail::enable_if_t<detail::move_never<T>::value, T> cast(object &&object) {
1786  return cast<T>(object);
1787 }
1788 
1789 template <typename T> T object::cast() const & { return pybind11::cast<T>(*this); }
1790 template <typename T> T object::cast() && { return pybind11::cast<T>(std::move(*this)); }
1791 template <> inline void object::cast() const & { return; }
1792 template <> inline void object::cast() && { return; }
1793 
1795 
1796 // Declared in pytypes.h:
1798 object object_or_cast(T &&o) { return pybind11::cast(std::forward<T>(o)); }
1799 
1800 struct override_unused {}; // Placeholder type for the unneeded (and dead code) static variable in the PYBIND11_OVERRIDE_OVERRIDE macro
1801 template <typename ret_type> using override_caster_t = conditional_t<
1803 
1804 // Trampoline use: for reference/pointer types to value-converted values, we do a value cast, then
1805 // store the result in the given variable. For other types, this is a no-op.
1807  return cast_op<T>(load_type(caster, o));
1808 }
1809 template <typename T> enable_if_t<!cast_is_temporary_value_reference<T>::value, T> cast_ref(object &&, override_unused &) {
1810  pybind11_fail("Internal error: cast_ref fallback invoked"); }
1811 
1812 // Trampoline use: Having a pybind11::cast with an invalid reference type is going to static_assert, even
1813 // though if it's in dead code, so we provide a "trampoline" to pybind11::cast that only does anything in
1814 // cases where pybind11::cast is valid.
1816  return pybind11::cast<T>(std::move(o)); }
1818  pybind11_fail("Internal error: cast_safe fallback invoked"); }
1819 template <> inline void cast_safe<void>(object &&) {}
1820 
1822 
1823 template <return_value_policy policy = return_value_policy::automatic_reference>
1824 tuple make_tuple() { return tuple(0); }
1825 
1827  typename... Args> tuple make_tuple(Args&&... args_) {
1828  constexpr size_t size = sizeof...(Args);
1829  std::array<object, size> args {
1830  { reinterpret_steal<object>(detail::make_caster<Args>::cast(
1831  std::forward<Args>(args_), policy, nullptr))... }
1832  };
1833  for (size_t i = 0; i < args.size(); i++) {
1834  if (!args[i]) {
1835 #if defined(NDEBUG)
1836  throw cast_error("make_tuple(): unable to convert arguments to Python object (compile in debug mode for details)");
1837 #else
1838  std::array<std::string, size> argtypes { {type_id<Args>()...} };
1839  throw cast_error("make_tuple(): unable to convert argument of type '" +
1840  argtypes[i] + "' to Python object");
1841 #endif
1842  }
1843  }
1844  tuple result(size);
1845  int counter = 0;
1846  for (auto &arg_value : args)
1847  PyTuple_SET_ITEM(result.ptr(), counter++, arg_value.release().ptr());
1848  return result;
1849 }
1850 
1853 struct arg {
1855  constexpr explicit arg(const char *name = nullptr) : name(name), flag_noconvert(false), flag_none(true) { }
1857  template <typename T> arg_v operator=(T &&value) const;
1859  arg &noconvert(bool flag = true) { flag_noconvert = flag; return *this; }
1861  arg &none(bool flag = true) { flag_none = flag; return *this; }
1862 
1863  const char *name;
1864  bool flag_noconvert : 1;
1865  bool flag_none : 1;
1866 };
1867 
1870 struct arg_v : arg {
1871 private:
1872  template <typename T>
1873  arg_v(arg &&base, T &&x, const char *descr = nullptr)
1874  : arg(base),
1877  )),
1878  descr(descr)
1879 #if !defined(NDEBUG)
1880  , type(type_id<T>())
1881 #endif
1882  { }
1883 
1884 public:
1886  template <typename T>
1887  arg_v(const char *name, T &&x, const char *descr = nullptr)
1888  : arg_v(arg(name), std::forward<T>(x), descr) { }
1889 
1891  template <typename T>
1892  arg_v(const arg &base, T &&x, const char *descr = nullptr)
1893  : arg_v(arg(base), std::forward<T>(x), descr) { }
1894 
1896  arg_v &noconvert(bool flag = true) { arg::noconvert(flag); return *this; }
1897 
1899  arg_v &none(bool flag = true) { arg::none(flag); return *this; }
1900 
1902  object value;
1904  const char *descr;
1905 #if !defined(NDEBUG)
1906  std::string type;
1908 #endif
1909 };
1910 
1914 struct kw_only {};
1915 
1919 struct pos_only {};
1920 
1921 template <typename T>
1922 arg_v arg::operator=(T &&value) const { return {std::move(*this), std::forward<T>(value)}; }
1923 
1925 template <typename /*unused*/> using arg_t = arg_v;
1926 
1927 inline namespace literals {
1931 constexpr arg operator"" _a(const char *name, size_t) { return arg(name); }
1932 } // namespace literals
1933 
1935 
1936 // forward declaration (definition in attr.h)
1937 struct function_record;
1938 
1941  function_call(const function_record &f, handle p); // Implementation in attr.h
1942 
1945 
1947  std::vector<handle> args;
1948 
1950  std::vector<bool> args_convert;
1951 
1954  object args_ref, kwargs_ref;
1955 
1957  handle parent;
1958 
1960  handle init_self;
1961 };
1962 
1963 
1965 template <typename... Args>
1967  using indices = make_index_sequence<sizeof...(Args)>;
1968 
1969  template <typename Arg> using argument_is_args = std::is_same<intrinsic_t<Arg>, args>;
1970  template <typename Arg> using argument_is_kwargs = std::is_same<intrinsic_t<Arg>, kwargs>;
1971  // Get args/kwargs argument positions relative to the end of the argument list:
1972  static constexpr auto args_pos = constexpr_first<argument_is_args, Args...>() - (int) sizeof...(Args),
1973  kwargs_pos = constexpr_first<argument_is_kwargs, Args...>() - (int) sizeof...(Args);
1974 
1975  static constexpr bool args_kwargs_are_last = kwargs_pos >= - 1 && args_pos >= kwargs_pos - 1;
1976 
1977  static_assert(args_kwargs_are_last, "py::args/py::kwargs are only permitted as the last argument(s) of a function");
1978 
1979 public:
1980  static constexpr bool has_kwargs = kwargs_pos < 0;
1981  static constexpr bool has_args = args_pos < 0;
1982 
1983  static constexpr auto arg_names = concat(type_descr(make_caster<Args>::name)...);
1984 
1985  bool load_args(function_call &call) {
1986  return load_impl_sequence(call, indices{});
1987  }
1988 
1989  template <typename Return, typename Guard, typename Func>
1991  return std::move(*this).template call_impl<Return>(std::forward<Func>(f), indices{}, Guard{});
1992  }
1993 
1994  template <typename Return, typename Guard, typename Func>
1996  std::move(*this).template call_impl<Return>(std::forward<Func>(f), indices{}, Guard{});
1997  return void_type();
1998  }
1999 
2000 private:
2001 
2002  static bool load_impl_sequence(function_call &, index_sequence<>) { return true; }
2003 
2004  template <size_t... Is>
2006 #ifdef __cpp_fold_expressions
2007  if ((... || !std::get<Is>(argcasters).load(call.args[Is], call.args_convert[Is])))
2008  return false;
2009 #else
2010  for (bool r : {std::get<Is>(argcasters).load(call.args[Is], call.args_convert[Is])...})
2011  if (!r)
2012  return false;
2013 #endif
2014  return true;
2015  }
2016 
2017  template <typename Return, typename Func, size_t... Is, typename Guard>
2018  Return call_impl(Func &&f, index_sequence<Is...>, Guard &&) && {
2019  return std::forward<Func>(f)(cast_op<Args>(std::move(std::get<Is>(argcasters)))...);
2020  }
2021 
2022  std::tuple<make_caster<Args>...> argcasters;
2023 };
2024 
2027 template <return_value_policy policy>
2029 public:
2030  template <typename... Ts>
2031  explicit simple_collector(Ts &&...values)
2032  : m_args(pybind11::make_tuple<policy>(std::forward<Ts>(values)...)) { }
2033 
2034  const tuple &args() const & { return m_args; }
2035  dict kwargs() const { return {}; }
2036 
2037  tuple args() && { return std::move(m_args); }
2038 
2040  object call(PyObject *ptr) const {
2041  PyObject *result = PyObject_CallObject(ptr, m_args.ptr());
2042  if (!result)
2043  throw error_already_set();
2044  return reinterpret_steal<object>(result);
2045  }
2046 
2047 private:
2049 };
2050 
2052 template <return_value_policy policy>
2054 public:
2055  template <typename... Ts>
2056  explicit unpacking_collector(Ts &&...values) {
2057  // Tuples aren't (easily) resizable so a list is needed for collection,
2058  // but the actual function call strictly requires a tuple.
2059  auto args_list = list();
2060  int _[] = { 0, (process(args_list, std::forward<Ts>(values)), 0)... };
2061  ignore_unused(_);
2062 
2063  m_args = std::move(args_list);
2064  }
2065 
2066  const tuple &args() const & { return m_args; }
2067  const dict &kwargs() const & { return m_kwargs; }
2068 
2069  tuple args() && { return std::move(m_args); }
2070  dict kwargs() && { return std::move(m_kwargs); }
2071 
2073  object call(PyObject *ptr) const {
2074  PyObject *result = PyObject_Call(ptr, m_args.ptr(), m_kwargs.ptr());
2075  if (!result)
2076  throw error_already_set();
2077  return reinterpret_steal<object>(result);
2078  }
2079 
2080 private:
2081  template <typename T>
2082  void process(list &args_list, T &&x) {
2083  auto o = reinterpret_steal<object>(detail::make_caster<T>::cast(std::forward<T>(x), policy, {}));
2084  if (!o) {
2085 #if defined(NDEBUG)
2086  argument_cast_error();
2087 #else
2088  argument_cast_error(std::to_string(args_list.size()), type_id<T>());
2089 #endif
2090  }
2091  args_list.append(o);
2092  }
2093 
2094  void process(list &args_list, detail::args_proxy ap) {
2095  for (const auto &a : ap)
2096  args_list.append(a);
2097  }
2098 
2099  void process(list &/*args_list*/, arg_v a) {
2100  if (!a.name)
2101 #if defined(NDEBUG)
2102  nameless_argument_error();
2103 #else
2104  nameless_argument_error(a.type);
2105 #endif
2106 
2107  if (m_kwargs.contains(a.name)) {
2108 #if defined(NDEBUG)
2109  multiple_values_error();
2110 #else
2111  multiple_values_error(a.name);
2112 #endif
2113  }
2114  if (!a.value) {
2115 #if defined(NDEBUG)
2116  argument_cast_error();
2117 #else
2118  argument_cast_error(a.name, a.type);
2119 #endif
2120  }
2121  m_kwargs[a.name] = a.value;
2122  }
2123 
2124  void process(list &/*args_list*/, detail::kwargs_proxy kp) {
2125  if (!kp)
2126  return;
2127  for (const auto &k : reinterpret_borrow<dict>(kp)) {
2128  if (m_kwargs.contains(k.first)) {
2129 #if defined(NDEBUG)
2130  multiple_values_error();
2131 #else
2132  multiple_values_error(str(k.first));
2133 #endif
2134  }
2135  m_kwargs[k.first] = k.second;
2136  }
2137  }
2138 
2139  [[noreturn]] static void nameless_argument_error() {
2140  throw type_error("Got kwargs without a name; only named arguments "
2141  "may be passed via py::arg() to a python function call. "
2142  "(compile in debug mode for details)");
2143  }
2144  [[noreturn]] static void nameless_argument_error(std::string type) {
2145  throw type_error("Got kwargs without a name of type '" + type + "'; only named "
2146  "arguments may be passed via py::arg() to a python function call. ");
2147  }
2148  [[noreturn]] static void multiple_values_error() {
2149  throw type_error("Got multiple values for keyword argument "
2150  "(compile in debug mode for details)");
2151  }
2152 
2153  [[noreturn]] static void multiple_values_error(std::string name) {
2154  throw type_error("Got multiple values for keyword argument '" + name + "'");
2155  }
2156 
2157  [[noreturn]] static void argument_cast_error() {
2158  throw cast_error("Unable to convert call argument to Python object "
2159  "(compile in debug mode for details)");
2160  }
2161 
2162  [[noreturn]] static void argument_cast_error(std::string name, std::string type) {
2163  throw cast_error("Unable to convert call argument '" + name
2164  + "' of type '" + type + "' to Python object");
2165  }
2166 
2167 private:
2170 };
2171 
2173 template <return_value_policy policy, typename... Args,
2174  typename = enable_if_t<all_of<is_positional<Args>...>::value>>
2176  return simple_collector<policy>(std::forward<Args>(args)...);
2177 }
2178 
2180 template <return_value_policy policy, typename... Args,
2181  typename = enable_if_t<!all_of<is_positional<Args>...>::value>>
2183  // Following argument order rules for generalized unpacking according to PEP 448
2184  static_assert(
2185  constexpr_last<is_positional, Args...>() < constexpr_first<is_keyword_or_ds, Args...>()
2186  && constexpr_last<is_s_unpacking, Args...>() < constexpr_first<is_ds_unpacking, Args...>(),
2187  "Invalid function call: positional args must precede keywords and ** unpacking; "
2188  "* unpacking must precede ** unpacking"
2189  );
2190  return unpacking_collector<policy>(std::forward<Args>(args)...);
2191 }
2192 
2193 template <typename Derived>
2194 template <return_value_policy policy, typename... Args>
2195 object object_api<Derived>::operator()(Args &&...args) const {
2196  return detail::collect_arguments<policy>(std::forward<Args>(args)...).call(derived().ptr());
2197 }
2198 
2199 template <typename Derived>
2200 template <return_value_policy policy, typename... Args>
2201 object object_api<Derived>::call(Args &&...args) const {
2202  return operator()<policy>(std::forward<Args>(args)...);
2203 }
2204 
2206 
2207 
2208 template<typename T>
2210  static_assert(
2211  std::is_base_of<detail::type_caster_generic, detail::make_caster<T>>::value,
2212  "py::type::of<T> only supports the case where T is a registered C++ types."
2213  );
2214 
2215  return detail::get_type_handle(typeid(T), true);
2216 }
2217 
2218 
2219 #define PYBIND11_MAKE_OPAQUE(...) \
2220  namespace pybind11 { namespace detail { \
2221  template<> class type_caster<__VA_ARGS__> : public type_caster_base<__VA_ARGS__> { }; \
2222  }}
2223 
2226 #define PYBIND11_TYPE(...) __VA_ARGS__
2227 
typename std::conditional< B, T, F >::type conditional_t
bool simple_holder_constructed
For simple layout, tracks whether the holder has been constructed.
unsigned char uint8_t
Definition: ms_stdint.h:83
static handle cast(T &&src, return_value_policy policy, handle parent)
Definition: cast.h:1421
void *(*)(const void *) Constructor
Definition: cast.h:924
void ignore_unused(const int *)
Ignore that a variable is unused in compiler warnings.
std::reference_wrapper< type > cast_op_type
Definition: cast.h:975
void deallocate_layout()
Destroys/deallocates all of the above.
Definition: cast.h:398
static constexpr uint8_t status_holder_constructed
Bit values for the non-simple status flags.
object object_or_cast(T &&o)
Definition: cast.h:1798
const detail::type_info * type
Definition: cast.h:213
bool load_args(function_call &call)
Definition: cast.h:1985
dict kwargs()&&
Definition: cast.h:2070
static constexpr bool load_impl(const sequence &, bool, index_sequence<>)
Definition: cast.h:1449
static void nameless_argument_error(std::string type)
Definition: cast.h:2144
void *& cast_op_type
Definition: cast.h:1150
static handle handle_of()
Definition: cast.h:2209
void keep_alive_impl(handle nurse, handle patient)
Definition: pybind11.h:1689
string type_name()
std::vector< PyObject * > loader_patient_stack
Definition: internals.h:105
bool hasattr(handle obj, handle name)
Definition: pytypes.h:403
static std::enable_if<!std::is_floating_point< U >::value &&std::is_signed< U >::value &&(sizeof(U) > sizeof(long)), handle >::type cast(U src, return_value_policy, handle)
Definition: cast.h:1086
intrinsic_t< T > itype
Definition: cast.h:862
static auto get(const T &p) -> decltype(p.get())
Definition: cast.h:1493
T cast() const &
Definition: cast.h:1789
return int(ret)+1
void process(list &, arg_v a)
Definition: cast.h:2099
bool load_impl(const sequence &seq, bool convert, index_sequence< Is... >)
Definition: cast.h:1452
bool load_impl_sequence(function_call &call, index_sequence< Is... >)
Definition: cast.h:2005
value_and_holder(size_t index)
Definition: cast.h:226
detail::type_info * get_global_type_info(const std::type_index &tp)
Definition: cast.h:181
tuple args()&&
Definition: cast.h:2069
enable_if_t<!std::is_void< Return >::value, Return > call(Func &&f)&&
Definition: cast.h:1990
arg & none(bool flag=true)
Indicates that the argument should/shouldn&#39;t allow None (e.g. for nullable pointer args) ...
Definition: cast.h:1861
constexpr size_t instance_simple_holder_in_ptrs()
bool load_bytes(enable_if_t< std::is_same< C, char >::value, handle > src)
Definition: cast.h:1289
bool load_bytes(enable_if_t<!std::is_same< C, char >::value, handle >)
Definition: cast.h:1304
std::vector< handle > args
Arguments passed to the function:
Definition: cast.h:1947
tuple make_tuple()
Definition: cast.h:1824
detail::cast_op_type< T > cast_op_type
Definition: cast.h:918
static std::enable_if<!std::is_floating_point< U >::value &&std::is_unsigned< U >::value &&(sizeof(U)<=sizeof(unsigned long)), handle >::type cast(U src, return_value_policy, handle)
Definition: cast.h:1080
static Constructor make_copy_constructor(...)
Definition: cast.h:942
void set_holder_constructed(bool v=true)
Definition: cast.h:242
bool instance_registered() const
Definition: cast.h:250
object call(PyObject *ptr) const
Call a Python function and pass the collected arguments.
Definition: cast.h:2073
bool load(handle src, bool convert)
Definition: cast.h:495
PyObject * ptr() const
Return the underlying PyObject * pointer.
Definition: pytypes.h:184
tuple args()&&
Definition: cast.h:2037
static handle cast_holder(const itype *src, const void *holder)
Definition: cast.h:911
std::vector< detail::type_info * > type_vec
Definition: cast.h:269
instance * inst
Definition: cast.h:268
type_map< type_info * > & registered_local_types_cpp()
Works like internals.registered_types_cpp, but for module-local registered types: ...
Definition: internals.h:304
bool default_holder
Definition: internals.h:147
static bool try_direct_conversions(handle)
Definition: cast.h:1569
void load_value(value_and_holder &&v_h)
Definition: cast.h:590
ArrayXcf v
Definition: Cwise_arg.cpp:1
const type_info * typeinfo
Definition: cast.h:757
static auto make_move_constructor(const T *x) -> decltype(new T(std::move(*const_cast< T * >(x))), Constructor
Definition: cast.h:936
Definition: pytypes.h:1322
Definition: cast.h:1870
static handle cast(bool src, return_value_policy, handle)
Definition: cast.h:1195
bool load(handle src, bool convert)
Definition: cast.h:1411
PYBIND11_NOINLINE internals & get_internals()
Return a reference to the current internals data.
Definition: internals.h:245
static handle cast(CharT src, return_value_policy policy, handle parent)
Definition: cast.h:1342
static std::enable_if< std::is_floating_point< U >::value, handle >::type cast(U src, return_value_policy, handle)
Definition: cast.h:1068
type_map< type_info * > registered_types_cpp
Definition: internals.h:97
object value
The default value.
Definition: cast.h:1902
leaf::MyValues values
V *& value_ptr() const
Definition: cast.h:228
type_caster_base()
Definition: cast.h:867
static handle cast(T, return_value_policy, handle)
Definition: cast.h:1106
bool try_implicit_casts(handle, bool)
Definition: cast.h:1554
detail::type_info * get_local_type_info(const std::type_index &tp)
Definition: cast.h:173
Definition: Half.h:150
iterator(instance *inst, const type_vec *tinfo)
Definition: cast.h:281
std::pair< decltype(internals::registered_types_py)::iterator, bool > all_type_info_get_cache(PyTypeObject *type)
Definition: pybind11.h:1730
static constexpr size_t size_in_ptrs(size_t s)
Helper class which loads arguments for C++ functions called from Python.
Definition: cast.h:1966
PYBIND11_NOINLINE bool try_load_foreign_module_local(handle src)
Definition: cast.h:637
PyTypeObject * type
Definition: internals.h:129
void set_instance_registered(bool v=true)
Definition: cast.h:255
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy y set format x g set format y g set format x2 g set format y2 g set format z g set angles radians set nogrid set key title set key left top Right noreverse box linetype linewidth samplen spacing width set nolabel set noarrow set nologscale set logscale x set set pointsize set encoding default set nopolar set noparametric set set set set surface set nocontour set clabel set mapping cartesian set nohidden3d set cntrparam order set cntrparam linear set cntrparam levels auto set cntrparam points set size set set xzeroaxis lt lw set x2zeroaxis lt lw set yzeroaxis lt lw set y2zeroaxis lt lw set tics in set ticslevel set tics set mxtics default set mytics default set mx2tics default set my2tics default set xtics border mirror norotate autofreq set ytics border mirror norotate autofreq set ztics border nomirror norotate autofreq set nox2tics set noy2tics set timestamp bottom norotate set rrange[*:*] noreverse nowriteback set trange[*:*] noreverse nowriteback set urange[*:*] noreverse nowriteback set vrange[*:*] noreverse nowriteback set xlabel matrix size set x2label set timefmt d m y n H
conditional_t< cast_is_temporary_value_reference< ret_type >::value, make_caster< ret_type >, override_unused > override_caster_t
Definition: cast.h:1802
Type caster for holder types like std::shared_ptr, etc.
Definition: cast.h:1498
typename caster_t::template cast_op_type< type > subcaster_cast_op_type
Definition: cast.h:963
bool operator!=(const iterator &other) const
Definition: cast.h:292
bool isinstance(handle obj)
Definition: pytypes.h:384
std::unordered_multimap< const void *, instance * > registered_instances
Definition: internals.h:99
Definition: cast.h:1853
bool load(handle h, bool)
Definition: cast.h:1118
void cast_safe< void >(object &&)
Definition: cast.h:1819
Internal data associated with a single function call.
Definition: cast.h:1940
object call(PyObject *ptr) const
Call a Python function and pass the collected arguments.
Definition: cast.h:2040
static const void * get(const itype *src, const std::type_info *&)
Definition: cast.h:845
bool load(handle src, bool convert)
Definition: cast.h:1508
The &#39;instance&#39; type which needs to be standard layout (need to be able to use &#39;offsetof&#39;) ...
void check_holder_compat()
Definition: cast.h:626
Definition: pytypes.h:1057
H & holder() const
Definition: cast.h:234
std::is_same< intrinsic_t< Arg >, args > argument_is_args
Definition: cast.h:1969
std::tuple< make_caster< Args >... > argcasters
Definition: cast.h:2022
static handle cast(T *src, return_value_policy policy, handle parent)
Definition: cast.h:1427
simple_collector< policy > collect_arguments(Args &&...args)
Collect only positional arguments for a Python function call.
Definition: cast.h:2175
PYBIND11_NOINLINE void clean_type_id(std::string &name)
Definition: typeid.h:32
arg & noconvert(bool flag=true)
Indicate that the type should not be converted in the type caster.
Definition: cast.h:1859
const char * c_str(Args &&...args)
Definition: internals.h:314
bool same_type(const std::type_info &lhs, const std::type_info &rhs)
Definition: internals.h:61
T cast() const
Definition: cast.h:1752
bool_constant< (std::is_reference< type >::value||std::is_pointer< type >::value)&&!std::is_base_of< type_caster_generic, make_caster< type >>::value &&!std::is_same< intrinsic_t< type >, void >::value > cast_is_temporary_value_reference
Definition: cast.h:1686
Array33i a
bool load(handle src, bool)
Definition: cast.h:1631
static handle cast(itype &&src, return_value_policy, handle parent)
Definition: cast.h:876
PyExc_RuntimeError[[noreturn]] PYBIND11_NOINLINE void pybind11_fail(const char *reason)
Used internally.
type_caster< T, SFINAE > & load_type(type_caster< T, SFINAE > &conv, const handle &handle)
Definition: cast.h:1705
conditional_t< std::is_signed< T >::value, _py_type_0, typename std::make_unsigned< _py_type_0 >::type > _py_type_1
Definition: cast.h:1013
conditional_t< is_copy_constructible< holder_type >::value, copyable_holder_caster< type, holder_type >, move_only_holder_caster< type, holder_type >> type_caster_holder
Definition: cast.h:1598
else if n * info
cout<< "Here is the matrix m:"<< endl<< m<< endl;Matrix< ptrdiff_t, 3, 1 > res
const handle & inc_ref() const &
Definition: pytypes.h:192
static handle cast(const std::reference_wrapper< type > &src, return_value_policy policy, handle parent)
Definition: cast.h:969
Scalar Scalar int size
Definition: benchVecAdd.cpp:17
PYBIND11_NOINLINE handle get_object_handle(const void *ptr, const detail::type_info *type)
Definition: cast.h:457
size_t index
Definition: cast.h:212
instance * inst
Definition: cast.h:211
conditional_t< sizeof(T)<=sizeof(long), long, long long > _py_type_0
Definition: cast.h:1012
Definition: descr.h:25
PYBIND11_NOINLINE handle get_type_handle(const std::type_info &tp, bool throw_if_missing)
Definition: cast.h:205
value_and_holder get_value_and_holder(const type_info *find_type=nullptr, bool throw_if_missing=true)
Definition: cast.h:326
static handle cast(const itype &src, return_value_policy policy, handle parent)
Definition: cast.h:870
object operator()(Args &&...args) const
Definition: cast.h:2195
bool try_implicit_casts(handle src, bool convert)
Definition: cast.h:609
static constexpr uint8_t status_instance_registered
const std::type_info * cpptype
Definition: internals.h:130
Definition: cast.h:1914
dict kwargs() const
Definition: cast.h:2035
static handle cast(holder_type &&src, return_value_policy, handle)
Definition: cast.h:1584
void ** vh
Definition: cast.h:214
static std::enable_if<!std::is_floating_point< U >::value &&std::is_signed< U >::value &&(sizeof(U)<=sizeof(long)), handle >::type cast(U src, return_value_policy, handle)
Definition: cast.h:1074
Values result
const tuple & args() const &
Definition: cast.h:2034
tuple m_args
Definition: cast.h:2048
const function_record & func
The function data:
Definition: cast.h:1944
value_and_holder curr
Definition: cast.h:279
value_and_holder()=default
arg_v operator=(T &&value) const
Assign a value to this argument.
Definition: cast.h:1922
float * ptr
PyObject * make_new_instance(PyTypeObject *type)
Definition: class.h:277
Return call_impl(Func &&f, index_sequence< Is... >, Guard &&)&&
Definition: cast.h:2018
std::vector< bool > args_convert
The convert value the arguments should be loaded with.
Definition: cast.h:1950
void allocate_layout()
Initializes all of the above type/values/holders data (but not the instance values themselves) ...
Definition: cast.h:350
const std::vector< detail::type_info * > & all_type_info(PyTypeObject *type)
Definition: cast.h:150
bool convert(const int &y)
const dict & kwargs() const &
Definition: cast.h:2067
simple_collector(Ts &&...values)
Definition: cast.h:2031
std::integral_constant< bool, B > bool_constant
Backports of std::bool_constant and std::negation to accommodate older compilers. ...
Eigen::Triplet< double > T
constexpr arg(const char *name=nullptr)
Constructs an argument with the name of the argument; if null or omitted, this is a positional argume...
Definition: cast.h:1855
static void argument_cast_error(std::string name, std::string type)
Definition: cast.h:2162
static std::pair< const void *, const type_info * > src_and_type(const itype *src)
Definition: cast.h:883
bool operator==(const iterator &other) const
Definition: cast.h:291
static handle cast(const itype *src, return_value_policy policy, handle parent)
Definition: cast.h:904
Point2(* f)(const Point3 &, OptionalJacobian< 2, 3 >)
static return_value_policy policy(return_value_policy p)
Definition: cast.h:1692
RealScalar s
constexpr descr< 0 > concat()
Definition: descr.h:83
type implicit_cast(index_sequence< Is... >)&
Definition: cast.h:1445
iterator find(const type_info *find_type)
Definition: cast.h:307
conditional_t< std::is_pointer< typename std::remove_reference< T >::type >::value, typename std::add_pointer< intrinsic_t< T >>::type, conditional_t< std::is_rvalue_reference< T >::value, typename std::add_rvalue_reference< intrinsic_t< T >>::type, typename std::add_lvalue_reference< intrinsic_t< T >>::type >> movable_cast_op_type
Definition: cast.h:788
type implicit_cast(index_sequence< Is... >)&&
Definition: cast.h:1447
const type_vec & tinfo
Definition: cast.h:270
unpacking_collector(Ts &&...values)
Definition: cast.h:2056
Helper type to replace &#39;void&#39; in some expressions.
iterator(size_t end)
Definition: cast.h:289
~loader_life_support()
... and destroyed after it returns
Definition: cast.h:52
std::vector< std::pair< const std::type_info *, void *(*)(void *)> > implicit_casts
Definition: internals.h:136
arg_v(arg &&base, T &&x, const char *descr=nullptr)
Definition: cast.h:1873
value_and_holder(instance *i, const detail::type_info *type, size_t vpos, size_t index)
Definition: cast.h:217
#define NDEBUG
Definition: ccolamd.c:582
conditional_t< std::is_floating_point< T >::value, double, _py_type_1 > py_type
Definition: cast.h:1014
constexpr descr< N+2, Ts... > type_descr(const descr< N, Ts... > &descr)
Definition: descr.h:95
void process(list &args_list, T &&x)
Definition: cast.h:2082
enable_if_t< cast_is_temporary_value_reference< T >::value, T > cast_ref(object &&o, make_caster< T > &caster)
Definition: cast.h:1806
bool load(handle src, bool convert)
Definition: cast.h:967
bool load(handle src, bool)
Definition: cast.h:1101
arg_v & none(bool flag=true)
Same as arg::nonone(), but returns *this as arg_v&, not arg&.
Definition: cast.h:1899
#define PYBIND11_MODULE_LOCAL_ID
Definition: internals.h:205
bool owned
If true, the pointer is owned which means we&#39;re free to manage it with a holder.
PYBIND11_NOINLINE bool isinstance_generic(handle obj, const std::type_info &tp)
Definition: cast.h:403
void * value
Definition: cast.h:759
arg_v & noconvert(bool flag=true)
Same as arg::noconvert(), but returns *this as arg_v&, not arg&.
Definition: cast.h:1896
static void multiple_values_error()
Definition: cast.h:2148
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const ArgReturnType arg() const
Helper class which collects positional, keyword, * and ** arguments for a Python function call...
Definition: cast.h:2053
loader_life_support()
A new patient frame is created when a function is entered.
Definition: cast.h:47
type_caster_base(const std::type_info &info)
Definition: cast.h:868
const double h
void check(bool b, bool ref)
Definition: fastmath.cpp:12
bool try_direct_conversions(handle src)
Definition: cast.h:619
PYBIND11_NOINLINE void all_type_info_populate(PyTypeObject *t, std::vector< type_info * > &bases)
Definition: cast.h:95
iterator & operator++()
Definition: cast.h:293
handle release()
Definition: pytypes.h:249
Definition: pytypes.h:1108
static bool load_impl_sequence(function_call &, index_sequence<>)
Definition: cast.h:2002
std::is_base_of< pyobject_tag, remove_reference_t< T >> is_pyobject
Definition: pytypes.h:48
PYBIND11_NOINLINE detail::type_info * get_type_info(PyTypeObject *type)
Definition: cast.h:164
size_t size() const
Definition: pytypes.h:1247
typename intrinsic_type< T >::type intrinsic_t
base()
Definition: attr.h:45
iterator end()
Definition: cast.h:305
DenseIndex ret
Definition: level1_impl.h:59
object getattr(handle obj, handle name)
Definition: pytypes.h:419
RAII wrapper that temporarily clears any Python error state.
static void nameless_argument_error()
Definition: cast.h:2139
static auto make_copy_constructor(const T *x) -> decltype(new T(*x), Constructor
Definition: cast.h:929
static const double v0
conditional_t< std::is_pointer< remove_reference_t< T >>::value, typename std::add_pointer< intrinsic_t< T >>::type, typename std::add_lvalue_reference< intrinsic_t< T >>::type > cast_op_type
Definition: cast.h:773
static handle cast(const holder_type &src, return_value_policy, handle)
Definition: cast.h:1526
void check_holder_compat()
Definition: cast.h:1533
std::is_same< bools< Ts::value..., true >, bools< true, Ts::value... >> all_of
static PYBIND11_NOINLINE handle cast(const void *_src, return_value_policy policy, handle parent, const detail::type_info *tinfo, void *(*copy_constructor)(const void *), void *(*move_constructor)(const void *), const void *existing_holder=nullptr)
Definition: cast.h:499
bool simple_instance_registered
For simple layout, tracks whether the instance is registered in registered_instances ...
std::is_same< intrinsic_t< Arg >, kwargs > argument_is_kwargs
Definition: cast.h:1970
PYBIND11_NOINLINE type_caster_generic(const std::type_info &type_info)
Definition: cast.h:489
Matrix stack(size_t nrMatrices,...)
Definition: Matrix.cpp:396
handle parent
The parent, if any.
Definition: cast.h:1957
Generic type caster for objects stored on the heap.
Definition: cast.h:861
value_and_holder & operator*()
Definition: cast.h:300
enable_if_t<!cast_is_temporary_value_reference< T >::value, T > cast_safe(object &&o)
Definition: cast.h:1815
float * p
static handle cast(const StringType &src, return_value_policy, handle)
Definition: cast.h:1259
static handle cast_impl(T &&src, return_value_policy policy, handle parent, index_sequence< Is... >)
Definition: cast.h:1466
object kwargs_ref
Definition: cast.h:1954
static handle cast(const handle &src, return_value_policy, handle)
Definition: cast.h:1641
T cast(const handle &handle)
Definition: cast.h:1727
static handle cast(const CharT *src, return_value_policy policy, handle parent)
Definition: cast.h:1337
arg_v(const arg &base, T &&x, const char *descr=nullptr)
Called internally when invoking py::arg("a") = value
Definition: cast.h:1892
static handle decode_utfN(const char *buffer, ssize_t nbytes)
Definition: cast.h:1270
static PYBIND11_NOINLINE void * local_load(PyObject *src, const type_info *ti)
Definition: cast.h:628
void * simple_value_holder[1+instance_simple_holder_in_ptrs()]
typename std::enable_if< B, T >::type enable_if_t
from cpp_future import (convenient aliases from C++14/17)
arg_v(const char *name, T &&x, const char *descr=nullptr)
Direct construction with name, default, and description.
Definition: cast.h:1887
holder_type holder
Definition: cast.h:1572
bool holder_constructed() const
Definition: cast.h:237
typename std::basic_string< CharT, Traits, Allocator >::value_type CharT
Definition: cast.h:1203
const char * descr
The (optional) description of the default value.
Definition: cast.h:1904
iterator begin()
Definition: cast.h:304
enable_if_t< std::is_void< Return >::value, void_type > call(Func &&f)&&
Definition: cast.h:1995
Definition: pytypes.h:1255
T reinterpret_steal(handle h)
Definition: pytypes.h:314
Annotation for function names.
Definition: attr.h:36
void process(list &, detail::kwargs_proxy kp)
Definition: cast.h:2124
Tuple< make_caster< Ts >... > subcasters
Definition: cast.h:1480
const char * name
If non-null, this is a named kwargs argument.
Definition: cast.h:1863
Annotation indicating that a class derives from another given type.
Definition: attr.h:42
bool load_value(value_and_holder &&v_h)
Definition: cast.h:1538
PYBIND11_NOINLINE std::string error_string()
Definition: cast.h:410
make_caster< T >::template cast_op_type< T > cast_op(make_caster< T > &caster)
Definition: cast.h:950
bool load(handle src, bool convert)
Definition: cast.h:1161
static void multiple_values_error(std::string name)
Definition: cast.h:2153
void load(Archive &ar, Eigen::Matrix< Scalar_, Rows_, Cols_, Ops_, MaxRows_, MaxCols_ > &m, const unsigned int)
Definition: base/Matrix.h:573
handle init_self
If this is a call to an initializer, this argument contains self
Definition: cast.h:1960
PyThreadState * get_thread_state_unchecked()
Definition: cast.h:469
std::unordered_map< PyTypeObject *, std::vector< type_info * > > registered_types_py
Definition: internals.h:98
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy x
const tuple & args() const &
Definition: cast.h:2066
void *(* module_local_load)(PyObject *, const type_info *)
Definition: internals.h:140
values_and_holders(instance *inst)
Definition: cast.h:273
static handle cast(const void *ptr, return_value_policy, handle)
Definition: cast.h:1143
typename make_index_sequence_impl< N >::type make_index_sequence
Internal data structure which holds metadata about a bound function (signature, overloads, etc.)
Definition: attr.h:138
return_value_policy
Approach used to cast a previously unknown C++ instance into a Python object.
bool try_implicit_casts(handle src, bool convert)
Definition: cast.h:1557
static PYBIND11_NOINLINE void add_patient(handle h)
Definition: cast.h:68
static std::enable_if<!std::is_floating_point< U >::value &&std::is_unsigned< U >::value &&(sizeof(U) > sizeof(unsigned long)), handle >::type cast(U src, return_value_policy, handle)
Definition: cast.h:1092
nonsimple_values_and_holders nonsimple
#define PYBIND11_TYPE_CASTER(type, py_name)
Definition: cast.h:979
PYBIND11_NOINLINE bool load_impl(handle src, bool convert)
Definition: cast.h:660
static PYBIND11_NOINLINE std::pair< const void *, const type_info * > src_and_type(const void *src, const std::type_info &cast_type, const std::type_info *rtti_type=nullptr)
Definition: cast.h:744
#define PYBIND11_NAMESPACE_END(name)
std::string type
The C++ type name of the default value (only available when compiled in debug mode) ...
Definition: cast.h:1907
make_index_sequence< sizeof...(Args)> indices
Definition: cast.h:1967
Definition: pytypes.h:995
Point2 t(10, 10)
static void argument_cast_error()
Definition: cast.h:2157
Definition: pytypes.h:897
#define PYBIND11_NAMESPACE_BEGIN(name)
make_index_sequence< size > indices
Definition: cast.h:1408
value_and_holder * operator->()
Definition: cast.h:301
static Constructor make_move_constructor(...)
Definition: cast.h:943
void process(list &args_list, detail::args_proxy ap)
Definition: cast.h:2094
type_caster_generic(const type_info *typeinfo)
Definition: cast.h:492
bool load(handle src, bool)
Definition: cast.h:1218
size_t size()
Definition: cast.h:313


gtsam
Author(s):
autogenerated on Sat May 8 2021 02:41:46