12 #define PYBIND11_VERSION_MAJOR 2 13 #define PYBIND11_VERSION_MINOR 6 14 #define PYBIND11_VERSION_PATCH 0.dev1 16 #define PYBIND11_NAMESPACE_BEGIN(name) namespace name { 17 #define PYBIND11_NAMESPACE_END(name) } 22 #if !defined(PYBIND11_NAMESPACE) 24 # define PYBIND11_NAMESPACE pybind11 __attribute__((visibility("hidden"))) 26 # define PYBIND11_NAMESPACE pybind11 30 #if !(defined(_MSC_VER) && __cplusplus == 199711L) && !defined(__INTEL_COMPILER) 31 # if __cplusplus >= 201402L 32 # define PYBIND11_CPP14 33 # if __cplusplus >= 201703L 34 # define PYBIND11_CPP17 37 #elif defined(_MSC_VER) && __cplusplus == 199711L 40 # if _MSVC_LANG >= 201402L 41 # define PYBIND11_CPP14 42 # if _MSVC_LANG > 201402L && _MSC_VER >= 1910 43 # define PYBIND11_CPP17 49 #if defined(__INTEL_COMPILER) 50 # if __INTEL_COMPILER < 1700 51 # error pybind11 requires Intel C++ compiler v17 or newer 53 #elif defined(__clang__) && !defined(__apple_build_version__) 54 # if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 3) 55 # error pybind11 requires clang 3.3 or newer 57 #elif defined(__clang__) 60 # if __clang_major__ < 5 61 # error pybind11 requires Xcode/clang 5.0 or newer 63 #elif defined(__GNUG__) 64 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8) 65 # error pybind11 requires gcc 4.8 or newer 67 #elif defined(_MSC_VER) 70 # if _MSC_FULL_VER < 190024210 71 # error pybind11 requires MSVC 2015 update 3 or newer 75 #if !defined(PYBIND11_EXPORT) 76 # if defined(WIN32) || defined(_WIN32) 77 # define PYBIND11_EXPORT __declspec(dllexport) 79 # define PYBIND11_EXPORT __attribute__ ((visibility("default"))) 84 # define PYBIND11_NOINLINE __declspec(noinline) 86 # define PYBIND11_NOINLINE __attribute__ ((noinline)) 89 #if defined(PYBIND11_CPP14) 90 # define PYBIND11_DEPRECATED(reason) [[deprecated(reason)]] 92 # define PYBIND11_DEPRECATED(reason) __attribute__((deprecated(reason))) 95 #if defined(PYBIND11_CPP17) 96 # define PYBIND11_MAYBE_UNUSED [[maybe_unused]] 97 #elif defined(_MSC_VER) && !defined(__clang__) 98 # define PYBIND11_MAYBE_UNUSED 100 # define PYBIND11_MAYBE_UNUSED __attribute__ ((__unused__)) 105 #if defined(_MSC_VER) && _MSC_VER >= 1900 106 # define HAVE_SNPRINTF 1 110 #if defined(_MSC_VER) 111 # if (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION < 4) 112 # define HAVE_ROUND 1 114 # pragma warning(push) 115 # pragma warning(disable: 4510 4610 4512 4005) 116 # if defined(_DEBUG) && !defined(Py_DEBUG) 117 # define PYBIND11_DEBUG_MARKER 123 #include <frameobject.h> 124 #include <pythread.h> 139 #if defined(copysign) 143 #if defined(_MSC_VER) 144 # if defined(PYBIND11_DEBUG_MARKER) 146 # undef PYBIND11_DEBUG_MARKER 148 # pragma warning(pop) 153 #include <forward_list> 158 #include <unordered_set> 159 #include <unordered_map> 162 #include <type_traits> 164 #if PY_MAJOR_VERSION >= 3 165 #define PYBIND11_INSTANCE_METHOD_NEW(ptr, class_) PyInstanceMethod_New(ptr) 166 #define PYBIND11_INSTANCE_METHOD_CHECK PyInstanceMethod_Check 167 #define PYBIND11_INSTANCE_METHOD_GET_FUNCTION PyInstanceMethod_GET_FUNCTION 168 #define PYBIND11_BYTES_CHECK PyBytes_Check 169 #define PYBIND11_BYTES_FROM_STRING PyBytes_FromString 170 #define PYBIND11_BYTES_FROM_STRING_AND_SIZE PyBytes_FromStringAndSize 171 #define PYBIND11_BYTES_AS_STRING_AND_SIZE PyBytes_AsStringAndSize 172 #define PYBIND11_BYTES_AS_STRING PyBytes_AsString 173 #define PYBIND11_BYTES_SIZE PyBytes_Size 174 #define PYBIND11_LONG_CHECK(o) PyLong_Check(o) 175 #define PYBIND11_LONG_AS_LONGLONG(o) PyLong_AsLongLong(o) 176 #define PYBIND11_LONG_FROM_SIGNED(o) PyLong_FromSsize_t((ssize_t) o) 177 #define PYBIND11_LONG_FROM_UNSIGNED(o) PyLong_FromSize_t((size_t) o) 178 #define PYBIND11_BYTES_NAME "bytes" 179 #define PYBIND11_STRING_NAME "str" 180 #define PYBIND11_SLICE_OBJECT PyObject 181 #define PYBIND11_FROM_STRING PyUnicode_FromString 182 #define PYBIND11_STR_TYPE ::pybind11::str 183 #define PYBIND11_BOOL_ATTR "__bool__" 184 #define PYBIND11_NB_BOOL(ptr) ((ptr)->nb_bool) 187 #define PYBIND11_PLUGIN_IMPL(name) \ 188 extern "C" PYBIND11_MAYBE_UNUSED PYBIND11_EXPORT PyObject *PyInit_##name(); \ 189 extern "C" PYBIND11_EXPORT PyObject *PyInit_##name() 192 #define PYBIND11_INSTANCE_METHOD_NEW(ptr, class_) PyMethod_New(ptr, nullptr, class_) 193 #define PYBIND11_INSTANCE_METHOD_CHECK PyMethod_Check 194 #define PYBIND11_INSTANCE_METHOD_GET_FUNCTION PyMethod_GET_FUNCTION 195 #define PYBIND11_BYTES_CHECK PyString_Check 196 #define PYBIND11_BYTES_FROM_STRING PyString_FromString 197 #define PYBIND11_BYTES_FROM_STRING_AND_SIZE PyString_FromStringAndSize 198 #define PYBIND11_BYTES_AS_STRING_AND_SIZE PyString_AsStringAndSize 199 #define PYBIND11_BYTES_AS_STRING PyString_AsString 200 #define PYBIND11_BYTES_SIZE PyString_Size 201 #define PYBIND11_LONG_CHECK(o) (PyInt_Check(o) || PyLong_Check(o)) 202 #define PYBIND11_LONG_AS_LONGLONG(o) (PyInt_Check(o) ? (long long) PyLong_AsLong(o) : PyLong_AsLongLong(o)) 203 #define PYBIND11_LONG_FROM_SIGNED(o) PyInt_FromSsize_t((ssize_t) o) // Returns long if needed. 204 #define PYBIND11_LONG_FROM_UNSIGNED(o) PyInt_FromSize_t((size_t) o) // Returns long if needed. 205 #define PYBIND11_BYTES_NAME "str" 206 #define PYBIND11_STRING_NAME "unicode" 207 #define PYBIND11_SLICE_OBJECT PySliceObject 208 #define PYBIND11_FROM_STRING PyString_FromString 209 #define PYBIND11_STR_TYPE ::pybind11::bytes 210 #define PYBIND11_BOOL_ATTR "__nonzero__" 211 #define PYBIND11_NB_BOOL(ptr) ((ptr)->nb_nonzero) 214 #define PYBIND11_PLUGIN_IMPL(name) \ 215 static PyObject *pybind11_init_wrapper(); \ 216 extern "C" PYBIND11_MAYBE_UNUSED PYBIND11_EXPORT void init##name(); \ 217 extern "C" PYBIND11_EXPORT void init##name() { \ 218 (void)pybind11_init_wrapper(); \ 220 PyObject *pybind11_init_wrapper() 223 #if PY_VERSION_HEX >= 0x03050000 && PY_VERSION_HEX < 0x03050200 225 struct _Py_atomic_address {
void *
value; };
226 PyAPI_DATA(_Py_atomic_address) _PyThreadState_Current;
230 #define PYBIND11_TRY_NEXT_OVERLOAD ((PyObject *) 1) // special failure return code 231 #define PYBIND11_STRINGIFY(x) #x 232 #define PYBIND11_TOSTRING(x) PYBIND11_STRINGIFY(x) 233 #define PYBIND11_CONCAT(first, second) first##second 234 #define PYBIND11_ENSURE_INTERNALS_READY \ 235 pybind11::detail::get_internals(); 237 #define PYBIND11_CHECK_PYTHON_VERSION \ 239 const char *compiled_ver = PYBIND11_TOSTRING(PY_MAJOR_VERSION) \ 240 "." PYBIND11_TOSTRING(PY_MINOR_VERSION); \ 241 const char *runtime_ver = Py_GetVersion(); \ 242 size_t len = std::strlen(compiled_ver); \ 243 if (std::strncmp(runtime_ver, compiled_ver, len) != 0 \ 244 || (runtime_ver[len] >= '0' && runtime_ver[len] <= '9')) { \ 245 PyErr_Format(PyExc_ImportError, \ 246 "Python version mismatch: module was compiled for Python %s, " \ 247 "but the interpreter version is incompatible: %s.", \ 248 compiled_ver, runtime_ver); \ 253 #define PYBIND11_CATCH_INIT_EXCEPTIONS \ 254 catch (pybind11::error_already_set &e) { \ 255 PyErr_SetString(PyExc_ImportError, e.what()); \ 257 } catch (const std::exception &e) { \ 258 PyErr_SetString(PyExc_ImportError, e.what()); \ 277 #define PYBIND11_PLUGIN(name) \ 278 PYBIND11_DEPRECATED("PYBIND11_PLUGIN is deprecated, use PYBIND11_MODULE") \ 279 static PyObject *pybind11_init(); \ 280 PYBIND11_PLUGIN_IMPL(name) { \ 281 PYBIND11_CHECK_PYTHON_VERSION \ 282 PYBIND11_ENSURE_INTERNALS_READY \ 284 return pybind11_init(); \ 285 } PYBIND11_CATCH_INIT_EXCEPTIONS \ 287 PyObject *pybind11_init() 310 #define PYBIND11_MODULE(name, variable) \ 311 PYBIND11_MAYBE_UNUSED \ 312 static void PYBIND11_CONCAT(pybind11_init_, name)(pybind11::module &); \ 313 PYBIND11_PLUGIN_IMPL(name) { \ 314 PYBIND11_CHECK_PYTHON_VERSION \ 315 PYBIND11_ENSURE_INTERNALS_READY \ 316 auto m = pybind11::module(PYBIND11_TOSTRING(name)); \ 318 PYBIND11_CONCAT(pybind11_init_, name)(m); \ 320 } PYBIND11_CATCH_INIT_EXCEPTIONS \ 322 void PYBIND11_CONCAT(pybind11_init_, name)(pybind11::module &variable) 328 using
size_t =
std::
size_t;
384 inline static constexpr
int log2(
size_t n,
int k = 0) {
return (
n <= 1) ? k :
log2(
n >> 1, k + 1); }
387 inline static constexpr
size_t size_in_ptrs(
size_t s) {
return 1 + ((s - 1) >>
log2(
sizeof(
void *))); }
396 static_assert(
sizeof(std::shared_ptr<int>) >=
sizeof(std::unique_ptr<int>),
397 "pybind assumes std::shared_ptrs are at least as big as std::unique_ptrs");
445 bool simple_layout : 1;
447 bool simple_holder_constructed : 1;
449 bool simple_instance_registered : 1;
451 bool has_patients : 1;
454 void allocate_layout();
457 void deallocate_layout();
465 static constexpr
uint8_t status_holder_constructed = 1;
466 static constexpr
uint8_t status_instance_registered = 2;
472 #if defined(PYBIND11_CPP14) && (!defined(_MSC_VER) || _MSC_VER >= 1910) 485 #if defined(PYBIND11_CPP14) 486 using std::index_sequence;
498 :
select_indices_impl<conditional_t<B, index_sequence<IPrev..., I>, index_sequence<IPrev...>>, I + 1, Bs...> {};
508 #if defined(__PGIC__) 509 template<
typename... >
using void_t = void;
517 #if defined(__cpp_fold_expressions) && !(defined(_MSC_VER) && (_MSC_VER < 1916)) 520 #elif !defined(_MSC_VER) 522 template <
class... Ts>
using all_of = std::is_same<
529 template <
class... Ts>
using all_of = std::conjunction<Ts...>;
530 template <
class... Ts>
using any_of = std::disjunction<Ts...>;
560 #ifdef __cpp_fold_expressions 561 template <
typename... Ts> constexpr
size_t constexpr_sum(Ts... ns) {
return (0 + ... +
size_t{ns}); }
564 template <
typename T,
typename... Ts>
571 template <
typename T,
typename... Ts>
572 constexpr
int first(
int i,
T v, Ts... vs) {
return v ? i :
first(i + 1, vs...); }
575 template <
typename T,
typename... Ts>
576 constexpr
int last(
int i,
int result,
T v, Ts... vs) {
return last(i + 1, v ? i : result, vs...); }
579 template <
template<
typename>
class Predicate,
typename... Ts>
585 template <
template<
typename>
class Predicate,
typename... Ts>
589 template <
size_t N,
typename T,
typename... Ts>
591 template <
typename T,
typename... Ts>
596 template <
template<
typename>
class Predicate,
typename Default,
typename... Ts>
599 static_assert(found <= 1,
"Found more than one type matching the predicate");
604 template <
template<
typename>
class P,
typename Default>
607 template <
template<
typename>
class Predicate,
typename Default,
typename... Ts>
624 template <
template<
typename...>
class Base>
627 static std::false_type
check(...);
632 template <
template<
typename...>
class Base,
typename T>
633 #if !defined(_MSC_VER) 635 #else // MSVC2015 has trouble with decltype in template aliases 636 struct is_template_base_of : decltype(is_template_base_of_impl<Base>::check((intrinsic_t<T>*)nullptr)) { };
641 template <
template<
typename...>
class Class,
typename T>
643 template <
template<
typename...>
class Class,
typename... Us>
651 template <
typename T>
652 struct is_input_iterator<T, void_t<decltype(*std::declval<T &>()), decltype(++std::declval<T &>())>>
663 template <
typename Function,
typename F = remove_reference_t<Function>>
669 std::remove_pointer<F>,
678 std::is_function, std::is_pointer, std::is_member_pointer>;
684 #ifdef __cpp_fold_expressions 685 #define PYBIND11_EXPAND_SIDE_EFFECTS(PATTERN) (((PATTERN), void()), ...) 688 #define PYBIND11_EXPAND_SIDE_EFFECTS(PATTERN) (void)pybind11::detail::expand_side_effects{ ((PATTERN), void(), false)..., false } 696 using std::runtime_error::runtime_error;
698 virtual void set_error()
const = 0;
701 #define PYBIND11_RUNTIME_EXCEPTION(name, type) \ 702 class name : public builtin_exception { public: \ 703 using builtin_exception::builtin_exception; \ 704 name() : name("") { } \ 705 void set_error() const override { PyErr_SetString(type, what()); } \ 729 template <typename T, typename SFINAE =
void> struct
is_fmt_numeric {
static constexpr
bool value =
false; };
739 static constexpr
const char c =
"?bBhHiIqQfdg"[detail::is_fmt_numeric<T>::index];
740 static constexpr
const char value[2] = {
c,
'\0' };
741 static std::string
format() {
return std::string(1, c); }
744 #if !defined(PYBIND11_CPP17) 762 template <
typename... Args>
766 template <
typename Return>
767 constexpr
auto operator()(Return (*pf)(Args...)) const noexcept
768 -> decltype(pf) {
return pf; }
770 template <
typename Return,
typename Class>
771 constexpr
auto operator()(Return (
Class::*pmf)(Args...), std::false_type = {}) const noexcept
772 -> decltype(pmf) {
return pmf; }
774 template <
typename Return,
typename Class>
775 constexpr
auto operator()(Return (
Class::*pmf)(Args...)
const, std::true_type) const noexcept
776 -> decltype(pmf) {
return pmf; }
781 #if defined(PYBIND11_CPP14) 782 #define PYBIND11_OVERLOAD_CAST 1 783 template <
typename... Args>
787 static constexpr detail::overload_cast_impl<Args...>
overload_cast = {};
794 static constexpr
auto const_ = std::true_type{};
796 #if !defined(PYBIND11_CPP14) // no overload_cast: providing something that static_assert-fails: 799 "pybind11::overload_cast<...> requires compiling in C++14 mode");
801 #endif // overload_cast 808 template <
typename T>
819 template <
typename Container,
typename = enable_if_t<std::is_convertible<decltype(*std::begin(std::declval<const Container &>())), T>::value>>
831 operator std::vector<T> &&() && {
return std::move(v); }
typename std::conditional< B, T, F >::type conditional_t
Helper template which holds a list of types.
void ignore_unused(const int *)
Ignore that a variable is unused in compiler warnings.
PyObject * weakrefs
Weak references.
any_container(std::vector< T > &&v)
constexpr int last(int, int result)
Helper template to strip away type modifiers.
any_container(const std::initializer_list< TIn > &c)
std::vector< T > * operator->()
bool[] expand_side_effects
Apply a function over each element of a parameter pack.
constexpr size_t instance_simple_holder_in_ptrs()
typename std::remove_cv< T >::type remove_cv_t
const std::vector< T > * operator->() const
Rot2 R(Rot2::fromAngle(0.1))
Compile-time all/any/none of that check the boolean value of all template types.
static constexpr size_t size_in_ptrs(size_t s)
bool_constant< std::is_base_of< Base, Derived >::value &&std::is_convertible< Derived *, Base * >::value > is_accessible_base_of
typename exactly_one< Predicate, Default, Ts... >::type exactly_one_t
constexpr auto operator()(Return(*pf)(Args...)) const noexcept-> decltype(pf)
Strip the class from a method type.
#define PYBIND11_NAMESPACE
The 'instance' type which needs to be standard layout (need to be able to use 'offsetof') ...
())>> bool_constant< std::is_pointer< T >::value &&std::is_function< typename std::remove_pointer< T >::type >::value > is_function_pointer
constexpr size_t constexpr_sum()
Compile-time integer sum.
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 > function_signature_t
PyExc_RuntimeError[[noreturn]] PYBIND11_NOINLINE void pybind11_fail(const char *reason)
Used internally.
static constexpr auto const_
constexpr int constexpr_first()
all_of< Predicates< T >... > satisfies_all_of
typename select_indices_impl< index_sequence<>, 0, Bs... >::type select_indices
constexpr auto operator()(Return(Class::*pmf)(Args...), std::false_type={}) const noexcept-> decltype(pmf)
const std::vector< T > & operator*() const
bool_constant< std::is_base_of< Base, Derived >::value &&!std::is_same< Base, Derived >::value > is_strict_base_of
constexpr int first(int i)
Implementation details for constexpr functions.
std::integral_constant< bool, B > bool_constant
Backports of std::bool_constant and std::negation to accommodate older compilers. ...
Eigen::Triplet< double > T
any_container(const Container &c)
typename remove_class< decltype(&F::operator())>::type type
Make an index sequence of the indices of true arguments.
typename std::remove_reference< T >::type remove_reference_t
any_container(It first, It last)
constexpr overload_cast_impl()
typename void_t_impl< Ts... >::type void_t
Defer the evaluation of type T until types Us are instantiated.
Helper type to replace 'void' in some expressions.
string::const_iterator It
Matrix< Scalar, Dynamic, Dynamic > C
constexpr int constexpr_last()
Return the index of the last type in Ts which satisfies Predicate<T>, or -1 if none match...
void check(bool b, bool ref)
void ** values_and_holders
decltype(is_template_base_of_impl< Base >::check((intrinsic_t< T > *) nullptr)) is_template_base_of
typename intrinsic_type< T >::type intrinsic_t
RAII wrapper that temporarily clears any Python error state.
constexpr auto operator()(Return(Class::*pmf)(Args...) const, std::true_type) const noexcept-> decltype(pmf)
std::is_same< bools< Ts::value..., true >, bools< true, Ts::value... >> all_of
typename deferred_type< T, Us... >::type deferred_t
Dummy destructor wrapper that can be used to expose classes with a private destructor.
static constexpr int log2(size_t n, int k=0)
C++ bindings of builtin Python exceptions.
typename std::enable_if< B, T >::type enable_if_t
from cpp_future import (convenient aliases from C++14/17)
#define PYBIND11_RUNTIME_EXCEPTION(name, type)
std::vector< T > & operator*()
index_sequence< S... > type
typename make_index_sequence_impl< N >::type make_index_sequence
#define PYBIND11_NOINLINE
return_value_policy
Approach used to cast a previously unknown C++ instance into a Python object.
nonsimple_values_and_holders nonsimple
#define PYBIND11_NAMESPACE_END(name)
#define PYBIND11_NAMESPACE_BEGIN(name)
Return the Nth element from the parameter pack.