#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.
Macros | |
#define | PYBIND11_VERSION_MAJOR 2 |
#define | PYBIND11_VERSION_MINOR 10 |
#define | PYBIND11_VERSION_PATCH 4 |
#define | PYBIND11_VERSION_HEX 0x020A0400 |
#define | PYBIND11_WARNING_DISABLE_MSVC(name) |
#define | PYBIND11_WARNING_DISABLE_CLANG(name) |
#define | PYBIND11_WARNING_DISABLE_GCC(name) |
#define | PYBIND11_WARNING_DISABLE_INTEL(name) |
#define | PYBIND11_NAMESPACE_BEGIN(name) |
#define | PYBIND11_NAMESPACE_END(name) |
#define | PYBIND11_NAMESPACE pybind11 |
#define | PYBIND11_EXPORT __attribute__((visibility("default"))) |
#define | PYBIND11_EXPORT_EXCEPTION |
#define | PYBIND11_NOINLINE __attribute__((noinline)) inline |
#define | PYBIND11_DEPRECATED(reason) __attribute__((deprecated(reason))) |
#define | PYBIND11_MAYBE_UNUSED __attribute__((__unused__)) |
#define | PYBIND11_INSTANCE_METHOD_NEW(ptr, class_) PyInstanceMethod_New(ptr) |
Include Python header, disable linking to pythonX_d.lib on Windows in debug mode. More... | |
#define | PYBIND11_INSTANCE_METHOD_CHECK PyInstanceMethod_Check |
#define | PYBIND11_INSTANCE_METHOD_GET_FUNCTION PyInstanceMethod_GET_FUNCTION |
#define | PYBIND11_BYTES_CHECK PyBytes_Check |
#define | PYBIND11_BYTES_FROM_STRING PyBytes_FromString |
#define | PYBIND11_BYTES_FROM_STRING_AND_SIZE PyBytes_FromStringAndSize |
#define | PYBIND11_BYTES_AS_STRING_AND_SIZE PyBytes_AsStringAndSize |
#define | PYBIND11_BYTES_AS_STRING PyBytes_AsString |
#define | PYBIND11_BYTES_SIZE PyBytes_Size |
#define | PYBIND11_LONG_CHECK(o) PyLong_Check(o) |
#define | PYBIND11_LONG_AS_LONGLONG(o) PyLong_AsLongLong(o) |
#define | PYBIND11_LONG_FROM_SIGNED(o) PyLong_FromSsize_t((ssize_t) (o)) |
#define | PYBIND11_LONG_FROM_UNSIGNED(o) PyLong_FromSize_t((size_t) (o)) |
#define | PYBIND11_BYTES_NAME "bytes" |
#define | PYBIND11_STRING_NAME "str" |
#define | PYBIND11_SLICE_OBJECT PyObject |
#define | PYBIND11_FROM_STRING PyUnicode_FromString |
#define | PYBIND11_STR_TYPE ::pybind11::str |
#define | PYBIND11_BOOL_ATTR "__bool__" |
#define | PYBIND11_NB_BOOL(ptr) ((ptr)->nb_bool) |
#define | PYBIND11_BUILTINS_MODULE "builtins" |
#define | PYBIND11_PLUGIN_IMPL(name) |
#define | PYBIND11_TRY_NEXT_OVERLOAD ((PyObject *) 1) |
#define | PYBIND11_STRINGIFY(x) #x |
#define | PYBIND11_TOSTRING(x) PYBIND11_STRINGIFY(x) |
#define | PYBIND11_CONCAT(first, second) first##second |
#define | PYBIND11_ENSURE_INTERNALS_READY pybind11::detail::get_internals(); |
#define | PYBIND11_CHECK_PYTHON_VERSION |
#define | PYBIND11_CATCH_INIT_EXCEPTIONS |
#define | PYBIND11_PLUGIN(name) |
\rst Deprecated in favor of PYBIND11_MODULE*** More... | |
#define | PYBIND11_MODULE(name, variable) |
\rst This macro creates the entry point that will be invoked when the Python interpreter imports an extension module. More... | |
#define | PYBIND11_EXPAND_SIDE_EFFECTS(PATTERN) (void) pybind11::detail::expand_side_effects { ((PATTERN), void(), false)..., false } |
#define | PYBIND11_RUNTIME_EXCEPTION(name, type) |
#define | PYBIND11_WORKAROUND_INCORRECT_MSVC_C4100(...) |
#define | PYBIND11_WORKAROUND_INCORRECT_GCC_UNUSED_BUT_SET_PARAMETER(...) |
#define | PYBIND11_DETAILED_ERROR_MESSAGES |
Typedefs | |
using | ssize_t = Py_ssize_t |
using | size_t = std::size_t |
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<bool B, typename T , typename F > | |
using | conditional_t = typename std::conditional< B, T, F >::type |
template<typename T > | |
using | remove_cv_t = typename std::remove_cv< T >::type |
template<typename T > | |
using | remove_reference_t = typename std::remove_reference< T >::type |
template<class T > | |
using | remove_cvref_t = typename remove_cvref< T >::type |
template<size_t N> | |
using | make_index_sequence = typename make_index_sequence_impl< N >::type |
template<bool... Bs> | |
using | select_indices = typename select_indices_impl< index_sequence<>, 0, Bs... >::type |
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<typename... Ts> | |
using | void_t = typename void_t_impl< Ts... >::type |
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<class... Ts> | |
using | none_of = negation< any_of< Ts... > > |
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<typename T > | |
using | intrinsic_t = typename intrinsic_type< T >::type |
template<template< typename > class Predicate, typename Default , typename... Ts> | |
using | exactly_one_t = typename exactly_one< Predicate, Default, Ts... >::type |
template<typename T , typename... Us> | |
using | deferred_t = typename deferred_type< T, Us... >::type |
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 > |
Like is_base_of, but requires a strict base (i.e. More... | |
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 > |
Like is_base_of, but also requires that the base type is accessible (i.e. More... | |
template<template< typename... > class Base, typename T > | |
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. More... | |
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 T > | |
using | is_function_pointer = bool_constant< std::is_pointer< T >::value &&std::is_function< typename std::remove_pointer< T >::type >::value > |
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 | 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. More... | |
using | expand_side_effects = bool[] |
Apply a function over each element of a parameter pack. More... | |
Enumerations | |
enum class | return_value_policy : uint8_t { automatic = 0 , automatic_reference , take_ownership , copy , move , reference , reference_internal , automatic = 0 , automatic_reference , take_ownership , copy , move , reference , reference_internal } |
Approach used to cast a previously unknown C++ instance into a Python object. More... | |
Functions | |
template<typename IntType > | |
ssize_t | ssize_t_cast (const IntType &val) |
static constexpr int | log2 (size_t n, int k=0) |
static constexpr size_t | size_in_ptrs (size_t s) |
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. 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) |
constexpr int | last (int, int result) |
template<typename T , typename... Ts> | |
constexpr int | last (int i, int result, T v, Ts... vs) |
template<template< typename > class Predicate, typename... Ts> | |
constexpr int | constexpr_first () |
Return the index of the first type in Ts which satisfies Predicate<T>. More... | |
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... | |
PYBIND11_NOINLINE void | pybind11_fail (const char *reason) |
Thrown when pybind11::cast or. More... | |
PYBIND11_NOINLINE void | pybind11_fail (const std::string &reason) |
std::string | get_fully_qualified_tp_name (PyTypeObject *) |
template<typename T > | |
static std::shared_ptr< T > | try_get_shared_from_this (std::enable_shared_from_this< T > *holder_value_ptr) |
template<typename... Args> | |
void | silence_unused_warnings (Args &&...) |
Variables | |
static constexpr auto | const_ = std::true_type{} |
Const member function selector for overload_cast. More... | |
#define PYBIND11_BYTES_AS_STRING_AND_SIZE PyBytes_AsStringAndSize |
#define PYBIND11_BYTES_FROM_STRING_AND_SIZE PyBytes_FromStringAndSize |
#define PYBIND11_CATCH_INIT_EXCEPTIONS |
#define PYBIND11_CHECK_PYTHON_VERSION |
#define PYBIND11_DEPRECATED | ( | reason | ) | __attribute__((deprecated(reason))) |
#define PYBIND11_ENSURE_INTERNALS_READY pybind11::detail::get_internals(); |
#define PYBIND11_EXPAND_SIDE_EFFECTS | ( | PATTERN | ) | (void) pybind11::detail::expand_side_effects { ((PATTERN), void(), false)..., false } |
#define PYBIND11_EXPORT __attribute__((visibility("default"))) |
#define PYBIND11_INSTANCE_METHOD_CHECK PyInstanceMethod_Check |
#define PYBIND11_INSTANCE_METHOD_GET_FUNCTION PyInstanceMethod_GET_FUNCTION |
#define PYBIND11_INSTANCE_METHOD_NEW | ( | ptr, | |
class_ | |||
) | PyInstanceMethod_New(ptr) |
#define PYBIND11_LONG_AS_LONGLONG | ( | o | ) | PyLong_AsLongLong(o) |
#define PYBIND11_LONG_FROM_SIGNED | ( | o | ) | PyLong_FromSsize_t((ssize_t) (o)) |
#define PYBIND11_LONG_FROM_UNSIGNED | ( | o | ) | PyLong_FromSize_t((size_t) (o)) |
#define PYBIND11_MODULE | ( | name, | |
variable | |||
) |
\rst 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 first 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!"; }); } \endrst
#define PYBIND11_NAMESPACE_BEGIN | ( | name | ) |
#define PYBIND11_NAMESPACE_END | ( | name | ) |
#define PYBIND11_PLUGIN | ( | name | ) |
\rst 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(); } \endrst
#define PYBIND11_PLUGIN_IMPL | ( | name | ) |
#define PYBIND11_TOSTRING | ( | x | ) | PYBIND11_STRINGIFY(x) |
#define PYBIND11_WORKAROUND_INCORRECT_GCC_UNUSED_BUT_SET_PARAMETER | ( | ... | ) |
using bool_constant = std::integral_constant<bool, B> |
using conditional_t = typename std::conditional<B, T, F>::type |
using deferred_t = typename deferred_type<T, Us...>::type |
using enable_if_t = typename std::enable_if<B, T>::type |
using exactly_one_t = typename exactly_one<Predicate, Default, Ts...>::type |
using expand_side_effects = bool[] |
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> |
using intrinsic_t = typename intrinsic_type<T>::type |
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> |
using is_function_pointer = bool_constant<std::is_pointer<T>::value && std::is_function<typename std::remove_pointer<T>::type>::value> |
using is_lambda = satisfies_none_of<remove_reference_t<T>, std::is_function, std::is_pointer, std::is_member_pointer> |
using is_shared_ptr = is_instantiation<std::shared_ptr, T> |
using is_strict_base_of = bool_constant<std::is_base_of<Base, Derived>::value && !std::is_same<Base, Derived>::value> |
using is_template_base_of = decltype(is_template_base_of_impl<Base>::check((intrinsic_t<T> *) nullptr)) |
using make_index_sequence = typename make_index_sequence_impl<N>::type |
using remove_cv_t = typename std::remove_cv<T>::type |
using remove_cvref_t = typename remove_cvref<T>::type |
using remove_reference_t = typename std::remove_reference<T>::type |
using satisfies_all_of = all_of<Predicates<T>...> |
using satisfies_any_of = any_of<Predicates<T>...> |
using satisfies_none_of = none_of<Predicates<T>...> |
using select_indices = typename select_indices_impl<index_sequence<>, 0, Bs...>::type |
using void_t = typename void_t_impl<Ts...>::type |
|
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 |
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 |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
Definition at line 807 of file common.h.
References constexpr_sum().
|
constexpr |
|
constexpr |
|
inline |
Definition at line 28 of file class.h.
References handle::cast(), and PYBIND11_BUILTINS_MODULE.
Referenced by instance::get_value_and_holder(), generic_type::install_buffer_funcs(), pybind11_meta_call(), pybind11_object_init(), and pybind11_set_dict().
|
constexpr |
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 557 of file common.h.
References size_in_ptrs().
Referenced by instance::allocate_layout().
|
constexpr |
|
inlinestaticconstexpr |
PYBIND11_NOINLINE void pybind11_fail | ( | const char * | reason | ) |
Thrown when pybind11::cast or.
handle::call fail due to a type casting error Used internally
Definition at line 1004 of file common.h.
Referenced by instance::allocate_layout(), and instance::get_value_and_holder().
PYBIND11_NOINLINE void pybind11_fail | ( | const std::string & | reason | ) |
|
inline |
Definition at line 547 of file common.h.
References log2().
Referenced by instance::allocate_layout().
|
inline |
|
inlinestatic |
|
staticconstexpr |
Const member function selector for overload_cast.