#include <Python.h>
#include <frameobject.h>
#include <pythread.h>
#include <cstddef>
#include <cstring>
#include <exception>
#include <forward_list>
#include <memory>
#include <stdexcept>
#include <string>
#include <type_traits>
#include <typeindex>
#include <unordered_map>
#include <unordered_set>
#include <vector>
Go to the source code of this file.
Typedefs | |
template<class... Ts> | |
using | all_of = std::is_same< bools< Ts::value..., true >, bools< true, Ts::value... > > |
template<class... Ts> | |
using | any_of = negation< all_of< negation< Ts >... > > |
template<bool B> | |
using | bool_constant = std::integral_constant< bool, B > |
Backports of std::bool_constant and std::negation to accommodate older compilers. More... | |
template<bool B, typename T , typename F > | |
using | conditional_t = typename std::conditional< B, T, F >::type |
template<typename T , typename... Us> | |
using | deferred_t = typename deferred_type< T, Us... >::type |
template<bool B, typename T = void> | |
using | enable_if_t = typename std::enable_if< B, T >::type |
from cpp_future import (convenient aliases from C++14/17) More... | |
template<template< typename > class Predicate, typename Default , typename... Ts> | |
using | exactly_one_t = typename exactly_one< Predicate, Default, Ts... >::type |
using | expand_side_effects = bool[] |
Apply a function over each element of a parameter pack. More... | |
template<typename Function , typename F = remove_reference_t<Function>> | |
using | function_signature_t = conditional_t< std::is_function< F >::value, F, typename conditional_t< std::is_pointer< F >::value||std::is_member_pointer< F >::value, std::remove_pointer< F >, strip_function_object< F > >::type > |
template<typename T > | |
using | intrinsic_t = typename intrinsic_type< T >::type |
template<typename Base , typename Derived > | |
using | is_accessible_base_of = bool_constant<(std::is_same< Base, Derived >::value||std::is_base_of< Base, Derived >::value) &&std::is_convertible< Derived *, Base * >::value > |
template<typename T > | |
using | is_function_pointer = bool_constant< std::is_pointer< T >::value &&std::is_function< typename std::remove_pointer< T >::type >::value > |
template<typename T > | |
using | is_lambda = satisfies_none_of< remove_reference_t< T >, std::is_function, std::is_pointer, std::is_member_pointer > |
template<typename T > | |
using | is_shared_ptr = is_instantiation< std::shared_ptr, T > |
Check if T is std::shared_ptr<U> where U can be anything. More... | |
template<typename Base , typename Derived > | |
using | is_strict_base_of = bool_constant< std::is_base_of< Base, Derived >::value &&!std::is_same< Base, Derived >::value > |
template<template< typename... > class Base, typename T > | |
using | is_template_base_of = decltype(is_template_base_of_impl< Base >::check((intrinsic_t< T > *) nullptr)) |
template<size_t N> | |
using | make_index_sequence = typename make_index_sequence_impl< N >::type |
template<class... Ts> | |
using | none_of = negation< any_of< Ts... > > |
template<typename T > | |
using | remove_cv_t = typename std::remove_cv< T >::type |
template<class T > | |
using | remove_cvref_t = typename remove_cvref< T >::type |
template<typename T > | |
using | remove_reference_t = typename std::remove_reference< T >::type |
template<class T , template< class > class... Predicates> | |
using | satisfies_all_of = all_of< Predicates< T >... > |
template<class T , template< class > class... Predicates> | |
using | satisfies_any_of = any_of< Predicates< T >... > |
template<class T , template< class > class... Predicates> | |
using | satisfies_none_of = none_of< Predicates< T >... > |
template<bool... Bs> | |
using | select_indices = typename select_indices_impl< index_sequence<>, 0, Bs... >::type |
using | size_t = std::size_t |
using | ssize_t = Py_ssize_t |
template<typename... Ts> | |
using | void_t = typename void_t_impl< Ts... >::type |
Enumerations | |
enum | return_value_policy : uint8_t { return_value_policy::automatic = 0, return_value_policy::automatic_reference, return_value_policy::take_ownership, return_value_policy::copy, return_value_policy::move, return_value_policy::reference, return_value_policy::reference_internal } |
Approach used to cast a previously unknown C++ instance into a Python object. More... | |
Functions | |
template<template< typename > class Predicate, typename... Ts> | |
constexpr int | constexpr_first () |
template<template< typename > class Predicate, typename... Ts> | |
constexpr int | constexpr_last () |
Return the index of the last type in Ts which satisfies Predicate<T>, or -1 if none match. More... | |
constexpr size_t | constexpr_sum () |
Compile-time integer sum. More... | |
template<typename T , typename... Ts> | |
constexpr size_t | constexpr_sum (T n, Ts... ns) |
constexpr int | first (int i) |
Implementation details for constexpr functions. More... | |
template<typename T , typename... Ts> | |
constexpr int | first (int i, T v, Ts... vs) |
std::string | get_fully_qualified_tp_name (PyTypeObject *) |
constexpr size_t | instance_simple_holder_in_ptrs () |
constexpr int | last (int, int result) |
template<typename T , typename... Ts> | |
constexpr int | last (int i, int result, T v, Ts... vs) |
static constexpr int | log2 (size_t n, int k=0) |
PyExc_RuntimeError [[noreturn]] PYBIND11_NOINLINE void | pybind11_fail (const char *reason) |
Used internally. More... | |
PYBIND11_NOINLINE void | pybind11_fail (const std::string &reason) |
PYBIND11_RUNTIME_EXCEPTION (cast_error, PyExc_RuntimeError) PYBIND11_RUNTIME_EXCEPTION(reference_cast_error | |
template<typename... Args> | |
void | silence_unused_warnings (Args &&...) |
static constexpr size_t | size_in_ptrs (size_t s) |
template<typename IntType > | |
ssize_t | ssize_t_cast (const IntType &val) |
template<typename T > | |
static std::shared_ptr< T > | try_get_shared_from_this (std::enable_shared_from_this< T > *holder_value_ptr) |
Variables | |
static constexpr auto | const_ = std::true_type{} |
#define PYBIND11_BOOL_ATTR "__bool__" |
Definition at line 294 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_BUILTINS_MODULE "builtins" |
Definition at line 296 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_BYTES_AS_STRING PyBytes_AsString |
Definition at line 283 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_BYTES_AS_STRING_AND_SIZE PyBytes_AsStringAndSize |
Definition at line 282 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_BYTES_CHECK PyBytes_Check |
Definition at line 279 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_BYTES_FROM_STRING PyBytes_FromString |
Definition at line 280 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_BYTES_FROM_STRING_AND_SIZE PyBytes_FromStringAndSize |
Definition at line 281 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_BYTES_NAME "bytes" |
Definition at line 289 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_BYTES_SIZE PyBytes_Size |
Definition at line 284 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_CATCH_INIT_EXCEPTIONS |
Definition at line 326 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_CHECK_PYTHON_VERSION |
Definition at line 309 of file wrap/pybind11/include/pybind11/detail/common.h.
Definition at line 306 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_DEPRECATED | ( | reason | ) | __attribute__((deprecated(reason))) |
Definition at line 138 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_DETAILED_ERROR_MESSAGES |
Definition at line 1165 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_ENSURE_INTERNALS_READY pybind11::detail::get_internals(); |
Definition at line 307 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_EXPAND_SIDE_EFFECTS | ( | PATTERN | ) | (void) pybind11::detail::expand_side_effects { ((PATTERN), void(), false)..., false } |
Definition at line 895 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_EXPORT __attribute__((visibility("default"))) |
Definition at line 94 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_EXPORT_EXCEPTION PYBIND11_EXPORT |
Definition at line 105 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_FROM_STRING PyUnicode_FromString |
Definition at line 292 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_INSTANCE_METHOD_CHECK PyInstanceMethod_Check |
Definition at line 277 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_INSTANCE_METHOD_GET_FUNCTION PyInstanceMethod_GET_FUNCTION |
Definition at line 278 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_INSTANCE_METHOD_NEW | ( | ptr, | |
class_ | |||
) | PyInstanceMethod_New(ptr) |
Include Python header, disable linking to pythonX_d.lib on Windows in debug mode.
Compatibility macros for Python 2 / Python 3 versions TODO: remove
Definition at line 276 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_LONG_AS_LONGLONG | ( | o | ) | PyLong_AsLongLong(o) |
Definition at line 286 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_LONG_CHECK | ( | o | ) | PyLong_Check(o) |
Definition at line 285 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_LONG_FROM_SIGNED | ( | o | ) | PyLong_FromSsize_t((ssize_t) (o)) |
Definition at line 287 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_LONG_FROM_UNSIGNED | ( | o | ) | PyLong_FromSize_t((size_t) (o)) |
Definition at line 288 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_MAYBE_UNUSED __attribute__((__unused__)) |
Definition at line 146 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_MODULE | ( | name, | |
variable | |||
) |
This macro creates the entry point that will be invoked when the Python interpreter imports an extension module. The module name is given as the fist argument and it should not be in quotes. The second macro argument defines a variable of type py::module_
which can be used to initialize the module.
The entry point is marked as "maybe unused" to aid dead-code detection analysis: since the entry point is typically only looked up at runtime and not referenced during translation, it would otherwise appear as unused ("dead") code.
.. code-block:: cpp
PYBIND11_MODULE(example, m) { m.doc() = "pybind11 example module";
Add bindings here m.def("foo", []() { return "Hello, World!"; }); }
Definition at line 385 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_NAMESPACE pybind11 |
Definition at line 30 of file wrap/pybind11/include/pybind11/detail/common.h.
Definition at line 20 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_NAMESPACE_END | ( | name | ) | } |
Definition at line 21 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_NB_BOOL | ( | ptr | ) | ((ptr)->nb_bool) |
Definition at line 295 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_NOINLINE __attribute__((noinline)) inline |
Definition at line 128 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_PLUGIN | ( | name | ) |
Deprecated in favor of PYBIND11_MODULE***
This macro creates the entry point that will be invoked when the Python interpreter imports a plugin library. Please create a module_
in the function body and return the pointer to its underlying Python object at the end.
.. code-block:: cpp
PYBIND11_PLUGIN(example) { pybind11::module_ m("example", "pybind11 example plugin");
/ Set up bindings here return m.ptr(); }
Definition at line 351 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_PLUGIN_IMPL | ( | name | ) |
Definition at line 299 of file wrap/pybind11/include/pybind11/detail/common.h.
Definition at line 918 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_SILENCE_MSVC_C4127 | ( | ... | ) | __VA_ARGS__ |
Definition at line 1158 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_SLICE_OBJECT PyObject |
Definition at line 291 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_STR_TYPE ::pybind11::str |
Definition at line 293 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_STRING_NAME "str" |
Definition at line 290 of file wrap/pybind11/include/pybind11/detail/common.h.
Definition at line 304 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_TOSTRING | ( | x | ) | PYBIND11_STRINGIFY(x) |
Definition at line 305 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_TRY_NEXT_OVERLOAD ((PyObject *) 1) |
Definition at line 303 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_VERSION_HEX 0x020A0000 |
Definition at line 18 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_VERSION_MAJOR 2 |
Definition at line 12 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_VERSION_MINOR 10 |
Definition at line 13 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_VERSION_PATCH 0 |
Definition at line 14 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_WORKAROUND_INCORRECT_GCC_UNUSED_BUT_SET_PARAMETER | ( | ... | ) |
Definition at line 1147 of file wrap/pybind11/include/pybind11/detail/common.h.
#define PYBIND11_WORKAROUND_INCORRECT_MSVC_C4100 | ( | ... | ) |
Definition at line 1139 of file wrap/pybind11/include/pybind11/detail/common.h.
using all_of = std::is_same<bools<Ts::value..., true>, bools<true, Ts::value...> > |
Definition at line 652 of file wrap/pybind11/include/pybind11/detail/common.h.
Definition at line 654 of file wrap/pybind11/include/pybind11/detail/common.h.
using bool_constant = std::integral_constant<bool, B> |
Backports of std::bool_constant and std::negation to accommodate older compilers.
Definition at line 623 of file wrap/pybind11/include/pybind11/detail/common.h.
using conditional_t = typename std::conditional<B, T, F>::type |
Definition at line 572 of file wrap/pybind11/include/pybind11/detail/common.h.
using deferred_t = typename deferred_type<T, Us...>::type |
Definition at line 800 of file wrap/pybind11/include/pybind11/detail/common.h.
using enable_if_t = typename std::enable_if<B, T>::type |
from cpp_future import (convenient aliases from C++14/17)
Definition at line 570 of file wrap/pybind11/include/pybind11/detail/common.h.
using exactly_one_t = typename exactly_one<Predicate, Default, Ts...>::type |
Definition at line 792 of file wrap/pybind11/include/pybind11/detail/common.h.
using expand_side_effects = bool[] |
Apply a function over each element of a parameter pack.
Definition at line 894 of file wrap/pybind11/include/pybind11/detail/common.h.
using function_signature_t = conditional_t< std::is_function<F>::value, F, typename conditional_t<std::is_pointer<F>::value || std::is_member_pointer<F>::value, std::remove_pointer<F>, strip_function_object<F> >::type> |
Definition at line 877 of file wrap/pybind11/include/pybind11/detail/common.h.
using intrinsic_t = typename intrinsic_type<T>::type |
Definition at line 715 of file wrap/pybind11/include/pybind11/detail/common.h.
using is_accessible_base_of = bool_constant<(std::is_same<Base, Derived>::value || std::is_base_of<Base, Derived>::value) && std::is_convertible<Derived *, Base *>::value> |
Like is_base_of, but also requires that the base type is accessible (i.e. that a Derived pointer can be converted to a Base pointer) For unions, is_base_of<T, T>::value
is False, so we need to check is_same
as well.
Definition at line 814 of file wrap/pybind11/include/pybind11/detail/common.h.
using is_function_pointer = bool_constant<std::is_pointer<T>::value && std::is_function<typename std::remove_pointer<T>::type>::value> |
Definition at line 859 of file wrap/pybind11/include/pybind11/detail/common.h.
using is_lambda = satisfies_none_of<remove_reference_t<T>, std::is_function, std::is_pointer, std::is_member_pointer> |
Returns true if the type looks like a lambda: that is, isn't a function, pointer or member pointer. Note that this can catch all sorts of other things, too; this is intended to be used in a place where passing a lambda makes sense.
Definition at line 886 of file wrap/pybind11/include/pybind11/detail/common.h.
using is_shared_ptr = is_instantiation<std::shared_ptr, T> |
Check if T is std::shared_ptr<U> where U can be anything.
Definition at line 846 of file wrap/pybind11/include/pybind11/detail/common.h.
using is_strict_base_of = bool_constant<std::is_base_of<Base, Derived>::value && !std::is_same<Base, Derived>::value> |
Like is_base_of, but requires a strict base (i.e. is_strict_base_of<T, T>::value == false
, unlike std::is_base_of
)
Definition at line 806 of file wrap/pybind11/include/pybind11/detail/common.h.
using is_template_base_of = decltype(is_template_base_of_impl<Base>::check((intrinsic_t<T> *) nullptr)) |
Check if a template is the base of a type. For example: is_template_base_of<Base, T>
is true if struct T : Base<U> {}
where U can be anything
Definition at line 830 of file wrap/pybind11/include/pybind11/detail/common.h.
using make_index_sequence = typename make_index_sequence_impl<N>::type |
Definition at line 605 of file wrap/pybind11/include/pybind11/detail/common.h.
Definition at line 664 of file wrap/pybind11/include/pybind11/detail/common.h.
using remove_cv_t = typename std::remove_cv<T>::type |
Definition at line 574 of file wrap/pybind11/include/pybind11/detail/common.h.
using remove_cvref_t = typename remove_cvref<T>::type |
Definition at line 588 of file wrap/pybind11/include/pybind11/detail/common.h.
using remove_reference_t = typename std::remove_reference<T>::type |
Definition at line 576 of file wrap/pybind11/include/pybind11/detail/common.h.
using satisfies_all_of = all_of<Predicates<T>...> |
Definition at line 667 of file wrap/pybind11/include/pybind11/detail/common.h.
using satisfies_any_of = any_of<Predicates<T>...> |
Definition at line 669 of file wrap/pybind11/include/pybind11/detail/common.h.
using satisfies_none_of = none_of<Predicates<T>...> |
Definition at line 671 of file wrap/pybind11/include/pybind11/detail/common.h.
using select_indices = typename select_indices_impl<index_sequence<>, 0, Bs...>::type |
Definition at line 619 of file wrap/pybind11/include/pybind11/detail/common.h.
using size_t = std::size_t |
Definition at line 406 of file wrap/pybind11/include/pybind11/detail/common.h.
using ssize_t = Py_ssize_t |
Definition at line 405 of file wrap/pybind11/include/pybind11/detail/common.h.
using void_t = typename void_t_impl<Ts...>::type |
Definition at line 639 of file wrap/pybind11/include/pybind11/detail/common.h.
|
strong |
Approach used to cast a previously unknown C++ instance into a Python object.
Enumerator | |
---|---|
automatic | This is the default return value policy, which falls back to the policy return_value_policy::take_ownership when the return value is a pointer. Otherwise, it uses return_value::move or return_value::copy for rvalue and lvalue references, respectively. See below for a description of what all of these different policies do. |
automatic_reference | As above, but use policy return_value_policy::reference when the return value is a pointer. This is the default conversion policy for function arguments when calling Python functions manually from C++ code (i.e. via handle::operator()). You probably won't need to use this. |
take_ownership | Reference an existing object (i.e. do not create a new copy) and take ownership. Python will call the destructor and delete operator when the object's reference count reaches zero. Undefined behavior ensues when the C++ side does the same.. |
copy | Create a new copy of the returned object, which will be owned by Python. This policy is comparably safe because the lifetimes of the two instances are decoupled. |
move | Use std::move to move the return value contents into a new instance that will be owned by Python. This policy is comparably safe because the lifetimes of the two instances (move source and destination) are decoupled. |
reference | Reference an existing object, but do not take ownership. The C++ side is responsible for managing the object's lifetime and deallocating it when it is no longer used. Warning: undefined behavior will ensue when the C++ side deletes an object that is still referenced and used by Python. |
reference_internal | This policy only applies to methods and properties. It references the object without taking ownership similar to the above return_value_policy::reference policy. In contrast to that policy, the function or property's implicit this argument (called the parent) is considered to be the the owner of the return value (the child). pybind11 then couples the lifetime of the parent to the child via a reference relationship that ensures that the parent cannot be garbage collected while Python is still using the child. More advanced variations of this scheme are also possible using combinations of return_value_policy::reference and the keep_alive call policy |
Definition at line 415 of file wrap/pybind11/include/pybind11/detail/common.h.
constexpr int constexpr_first | ( | ) |
Return the index of the first type in Ts which satisfies Predicate<T>. Returns sizeof...(Ts) if none match.
Definition at line 756 of file wrap/pybind11/include/pybind11/detail/common.h.
constexpr int constexpr_last | ( | ) |
Return the index of the last type in Ts which satisfies Predicate<T>, or -1 if none match.
Definition at line 762 of file wrap/pybind11/include/pybind11/detail/common.h.
constexpr size_t constexpr_sum | ( | ) |
Compile-time integer sum.
Definition at line 731 of file wrap/pybind11/include/pybind11/detail/common.h.
Definition at line 733 of file wrap/pybind11/include/pybind11/detail/common.h.
Implementation details for constexpr functions.
Definition at line 740 of file wrap/pybind11/include/pybind11/detail/common.h.
Definition at line 742 of file wrap/pybind11/include/pybind11/detail/common.h.
|
inline |
constexpr size_t instance_simple_holder_in_ptrs | ( | ) |
The space to allocate for simple layout instance holders (see below) in multiple of the size of a pointer (e.g. 2 means 16 bytes on 64-bit architectures). The default is the minimum required to holder either a std::unique_ptr or std::shared_ptr (which is almost always sizeof(std::shared_ptr<T>)).
Definition at line 483 of file wrap/pybind11/include/pybind11/detail/common.h.
Definition at line 746 of file wrap/pybind11/include/pybind11/detail/common.h.
Definition at line 748 of file wrap/pybind11/include/pybind11/detail/common.h.
Definition at line 468 of file wrap/pybind11/include/pybind11/detail/common.h.
PyExc_RuntimeError [[noreturn]] PYBIND11_NOINLINE void pybind11_fail | ( | const char * | reason | ) |
Used internally.
Definition at line 939 of file wrap/pybind11/include/pybind11/detail/common.h.
PYBIND11_NOINLINE void pybind11_fail | ( | const std::string & | reason | ) |
Definition at line 943 of file wrap/pybind11/include/pybind11/detail/common.h.
PYBIND11_RUNTIME_EXCEPTION | ( | cast_error | , |
PyExc_RuntimeError | |||
) |
Thrown when pybind11::cast or handle::call fail due to a type casting error
|
inline |
Definition at line 1131 of file wrap/pybind11/include/pybind11/detail/common.h.
Definition at line 473 of file wrap/pybind11/include/pybind11/detail/common.h.
|
inline |
Definition at line 409 of file wrap/pybind11/include/pybind11/detail/common.h.
|
inlinestatic |
Definition at line 1109 of file wrap/pybind11/include/pybind11/detail/common.h.
|
static |
Const member function selector for overload_cast
Definition at line 1047 of file wrap/pybind11/include/pybind11/detail/common.h.