mirror of
https://github.com/pybind/pybind11.git
synced 2025-02-19 15:10:38 +00:00
last breaking change: be consistent about the project name
This commit is contained in:
parent
607654f7ec
commit
8f4eb00690
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
cmake_minimum_required(VERSION 2.8)
|
cmake_minimum_required(VERSION 2.8)
|
||||||
|
|
||||||
project(pybind)
|
project(pybind11)
|
||||||
|
|
||||||
# Add a CMake parameter for choosing a desired Python version
|
# Add a CMake parameter for choosing a desired Python version
|
||||||
set(PYBIND_PYTHON_VERSION "" CACHE STRING "Python version to use for compiling the example application")
|
set(PYBIND_PYTHON_VERSION "" CACHE STRING "Python version to use for compiling the example application")
|
||||||
@ -55,13 +55,13 @@ include_directories(include)
|
|||||||
|
|
||||||
# Create the binding library
|
# Create the binding library
|
||||||
add_library(example SHARED
|
add_library(example SHARED
|
||||||
include/pybind/cast.h
|
include/pybind11/cast.h
|
||||||
include/pybind/common.h
|
include/pybind11/common.h
|
||||||
include/pybind/operators.h
|
include/pybind11/operators.h
|
||||||
include/pybind/pybind.h
|
include/pybind11/pybind11.h
|
||||||
include/pybind/pytypes.h
|
include/pybind11/pytypes.h
|
||||||
include/pybind/typeid.h
|
include/pybind11/typeid.h
|
||||||
include/pybind/numpy.h
|
include/pybind11/numpy.h
|
||||||
example/example.cpp
|
example/example.cpp
|
||||||
example/example1.cpp
|
example/example1.cpp
|
||||||
example/example2.cpp
|
example/example2.cpp
|
||||||
|
@ -8,9 +8,9 @@ present:
|
|||||||
|
|
||||||
.. code-block:: cpp
|
.. code-block:: cpp
|
||||||
|
|
||||||
#include <pybind/pybind.h>
|
#include <pybind11/pybind11.h>
|
||||||
|
|
||||||
namespace py = pybind;
|
namespace py = pybind11
|
||||||
|
|
||||||
Operator overloading
|
Operator overloading
|
||||||
====================
|
====================
|
||||||
@ -43,10 +43,10 @@ to Python.
|
|||||||
|
|
||||||
.. code-block:: cpp
|
.. code-block:: cpp
|
||||||
|
|
||||||
#include <pybind/operators.h>
|
#include <pybind11/operators.h>
|
||||||
|
|
||||||
PYBIND_PLUGIN(example) {
|
PYBIND_PLUGIN(example) {
|
||||||
py::module m("example", "pybind example plugin");
|
py::module m("example", "pybind11 example plugin");
|
||||||
|
|
||||||
py::class_<Vector2>(m, "Vector2")
|
py::class_<Vector2>(m, "Vector2")
|
||||||
.def(py::init<float, float>())
|
.def(py::init<float, float>())
|
||||||
@ -79,7 +79,7 @@ C++ side, or to perform other types of customization.
|
|||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
To use the more convenient ``py::self`` notation, the additional
|
To use the more convenient ``py::self`` notation, the additional
|
||||||
header file :file:`pybind/operators.h` must be included.
|
header file :file:`pybind11/operators.h` must be included.
|
||||||
|
|
||||||
.. seealso::
|
.. seealso::
|
||||||
|
|
||||||
@ -120,15 +120,15 @@ its return value upon execution.
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
After including the extra header file :file:`pybind/functional.h`, it is almost
|
After including the extra header file :file:`pybind11/functional.h`, it is almost
|
||||||
trivial to generate binding code for both of these functions.
|
trivial to generate binding code for both of these functions.
|
||||||
|
|
||||||
.. code-block:: cpp
|
.. code-block:: cpp
|
||||||
|
|
||||||
#include <pybind/functional.h>
|
#include <pybind11/functional.h>
|
||||||
|
|
||||||
PYBIND_PLUGIN(example) {
|
PYBIND_PLUGIN(example) {
|
||||||
py::module m("example", "pybind example plugin");
|
py::module m("example", "pybind11 example plugin");
|
||||||
|
|
||||||
m.def("func_arg", &func_arg);
|
m.def("func_arg", &func_arg);
|
||||||
m.def("func_ret", &func_ret);
|
m.def("func_ret", &func_ret);
|
||||||
@ -200,7 +200,7 @@ Normally, the binding code for these classes would look as follows:
|
|||||||
.. code-block:: cpp
|
.. code-block:: cpp
|
||||||
|
|
||||||
PYBIND_PLUGIN(example) {
|
PYBIND_PLUGIN(example) {
|
||||||
py::module m("example", "pybind example plugin");
|
py::module m("example", "pybind11 example plugin");
|
||||||
|
|
||||||
py::class_<Animal> animal(m, "Animal");
|
py::class_<Animal> animal(m, "Animal");
|
||||||
animal
|
animal
|
||||||
@ -248,7 +248,7 @@ a default implementation. The binding code also needs a few minor adaptations
|
|||||||
:emphasize-lines: 4,6,7
|
:emphasize-lines: 4,6,7
|
||||||
|
|
||||||
PYBIND_PLUGIN(example) {
|
PYBIND_PLUGIN(example) {
|
||||||
py::module m("example", "pybind example plugin");
|
py::module m("example", "pybind11 example plugin");
|
||||||
|
|
||||||
py::class_<PyAnimal> animal(m, "Animal");
|
py::class_<PyAnimal> animal(m, "Animal");
|
||||||
animal
|
animal
|
||||||
@ -295,11 +295,11 @@ a virtual method call.
|
|||||||
Passing STL data structures
|
Passing STL data structures
|
||||||
===========================
|
===========================
|
||||||
|
|
||||||
When including the additional header file :file:`pybind/stl.h`, conversions
|
When including the additional header file :file:`pybind11/stl.h`, conversions
|
||||||
between ``std::vector<>`` and ``std::map<>`` and the Python ``list`` and
|
between ``std::vector<>`` and ``std::map<>`` and the Python ``list`` and
|
||||||
``dict`` data structures are automatically enabled. The types ``std::pair<>``
|
``dict`` data structures are automatically enabled. The types ``std::pair<>``
|
||||||
and ``std::tuple<>`` are already supported out of the box with just the core
|
and ``std::tuple<>`` are already supported out of the box with just the core
|
||||||
:file:`pybind/pybind.h` header.
|
:file:`pybind11/pybind11.h` header.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
@ -376,7 +376,7 @@ See below for an example that uses the
|
|||||||
};
|
};
|
||||||
|
|
||||||
PYBIND_PLUGIN(example) {
|
PYBIND_PLUGIN(example) {
|
||||||
py::module m("example", "pybind example plugin");
|
py::module m("example", "pybind11 example plugin");
|
||||||
|
|
||||||
py::class_<Example>(m, "Example")
|
py::class_<Example>(m, "Example")
|
||||||
.def(py::init<>())
|
.def(py::init<>())
|
||||||
@ -620,7 +620,7 @@ dense array of doubles in C-style ordering.
|
|||||||
|
|
||||||
When it is invoked with a different type (e.g. an integer), the binding code
|
When it is invoked with a different type (e.g. an integer), the binding code
|
||||||
will attempt to cast the input into a NumPy array of the requested type.
|
will attempt to cast the input into a NumPy array of the requested type.
|
||||||
Note that this feature requires the ``pybind/numpy.h`` header to be included.
|
Note that this feature requires the ``pybind11/numpy.h`` header to be included.
|
||||||
|
|
||||||
Vectorizing functions
|
Vectorizing functions
|
||||||
=====================
|
=====================
|
||||||
@ -633,7 +633,7 @@ N-D arrays) in addition to its normal arguments:
|
|||||||
|
|
||||||
double my_func(int x, float y, double z);
|
double my_func(int x, float y, double z);
|
||||||
|
|
||||||
After including the ``pybind/numpy.h`` header, this is extremely simple:
|
After including the ``pybind11/numpy.h`` header, this is extremely simple:
|
||||||
|
|
||||||
.. code-block:: cpp
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ Windows
|
|||||||
On Windows, use the `CMake GUI`_ to create a Visual Studio project. Note that
|
On Windows, use the `CMake GUI`_ to create a Visual Studio project. Note that
|
||||||
only the 2015 release and newer versions are supported since pybind11 relies on
|
only the 2015 release and newer versions are supported since pybind11 relies on
|
||||||
various C++11 language features that break older versions of Visual Studio.
|
various C++11 language features that break older versions of Visual Studio.
|
||||||
After running CMake, open the created :file:`pybind.sln` file and perform a
|
After running CMake, open the created :file:`pybind11.sln` file and perform a
|
||||||
release build, which will will produce a file named
|
release build, which will will produce a file named
|
||||||
:file:`Release\\example.pyd`. Copy this file to the :file:`example` directory
|
:file:`Release\\example.pyd`. Copy this file to the :file:`example` directory
|
||||||
and run :file:`example\\run_test.py` using the targeted Python version.
|
and run :file:`example\\run_test.py` using the targeted Python version.
|
||||||
@ -79,16 +79,16 @@ a file named :file:`example.cpp` with the following contents:
|
|||||||
|
|
||||||
.. code-block:: cpp
|
.. code-block:: cpp
|
||||||
|
|
||||||
#include <pybind/pybind.h>
|
#include <pybind11/pybind11.h>
|
||||||
|
|
||||||
int add(int i, int j) {
|
int add(int i, int j) {
|
||||||
return i + j;
|
return i + j;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace py = pybind;
|
namespace py = pybind11
|
||||||
|
|
||||||
PYBIND_PLUGIN(example) {
|
PYBIND_PLUGIN(example) {
|
||||||
py::module m("example", "pybind example plugin");
|
py::module m("example", "pybind11 example plugin");
|
||||||
|
|
||||||
m.def("add", &add, "A function which adds two numbers");
|
m.def("add", &add, "A function which adds two numbers");
|
||||||
|
|
||||||
@ -117,7 +117,7 @@ example can be compiled using the following command
|
|||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
$ c++ -O3 -shared -std=c++11 -I <path-to-pybind>/include `python-config --cflags --libs` example.cpp -o example.so
|
$ c++ -O3 -shared -std=c++11 -I <path-to-pybind11>/include `python-config --cflags --libs` example.cpp -o example.so
|
||||||
|
|
||||||
In general, it is advisable to include several additional build parameters
|
In general, it is advisable to include several additional build parameters
|
||||||
that can considerably reduce the size of the created binary. Refer to section
|
that can considerably reduce the size of the created binary. Refer to section
|
||||||
@ -222,41 +222,41 @@ The following basic data types are supported out of the box (some may require
|
|||||||
an additional extension header to be included). To pass other data structures
|
an additional extension header to be included). To pass other data structures
|
||||||
as arguments and return values, refer to the section on binding :ref:`classes`.
|
as arguments and return values, refer to the section on binding :ref:`classes`.
|
||||||
|
|
||||||
+------------------------+--------------------------+---------------------+
|
+------------------------+--------------------------+-----------------------+
|
||||||
| Data type | Description | Header file |
|
| Data type | Description | Header file |
|
||||||
+========================+==========================+=====================+
|
+========================+==========================+=======================+
|
||||||
| int8_t, uint8_t | 8-bit integers | pybind/pybind.h |
|
| int8_t, uint8_t | 8-bit integers | pybind11/pybind11.h |
|
||||||
+------------------------+--------------------------+---------------------+
|
+------------------------+--------------------------+-----------------------+
|
||||||
| int16_t, uint16_t | 16-bit integers | pybind/pybind.h |
|
| int16_t, uint16_t | 16-bit integers | pybind11/pybind11.h |
|
||||||
+------------------------+--------------------------+---------------------+
|
+------------------------+--------------------------+-----------------------+
|
||||||
| int32_t, uint32_t | 32-bit integers | pybind/pybind.h |
|
| int32_t, uint32_t | 32-bit integers | pybind11/pybind11.h |
|
||||||
+------------------------+--------------------------+---------------------+
|
+------------------------+--------------------------+-----------------------+
|
||||||
| int64_t, uint64_t | 64-bit integers | pybind/pybind.h |
|
| int64_t, uint64_t | 64-bit integers | pybind11/pybind11.h |
|
||||||
+------------------------+--------------------------+---------------------+
|
+------------------------+--------------------------+-----------------------+
|
||||||
| ssize_t, size_t | Platform-dependent size | pybind/pybind.h |
|
| ssize_t, size_t | Platform-dependent size | pybind11/pybind11.h |
|
||||||
+------------------------+--------------------------+---------------------+
|
+------------------------+--------------------------+-----------------------+
|
||||||
| float, double | Floating point types | pybind/pybind.h |
|
| float, double | Floating point types | pybind11/pybind11.h |
|
||||||
+------------------------+--------------------------+---------------------+
|
+------------------------+--------------------------+-----------------------+
|
||||||
| bool | Two-state Boolean type | pybind/pybind.h |
|
| bool | Two-state Boolean type | pybind11/pybind11.h |
|
||||||
+------------------------+--------------------------+---------------------+
|
+------------------------+--------------------------+-----------------------+
|
||||||
| char | Character literal | pybind/pybind.h |
|
| char | Character literal | pybind11/pybind11.h |
|
||||||
+------------------------+--------------------------+---------------------+
|
+------------------------+--------------------------+-----------------------+
|
||||||
| const char * | UTF-8 string literal | pybind/pybind.h |
|
| const char * | UTF-8 string literal | pybind11/pybind11.h |
|
||||||
+------------------------+--------------------------+---------------------+
|
+------------------------+--------------------------+-----------------------+
|
||||||
| std::string | STL dynamic UTF-8 string | pybind/pybind.h |
|
| std::string | STL dynamic UTF-8 string | pybind11/pybind11.h |
|
||||||
+------------------------+--------------------------+---------------------+
|
+------------------------+--------------------------+-----------------------+
|
||||||
| std::pair<T1, T2> | Pair of two custom types | pybind/pybind.h |
|
| std::pair<T1, T2> | Pair of two custom types | pybind11/pybind11.h |
|
||||||
+------------------------+--------------------------+---------------------+
|
+------------------------+--------------------------+-----------------------+
|
||||||
| std::tuple<....> | Arbitrary tuple of types | pybind/pybind.h |
|
| std::tuple<....> | Arbitrary tuple of types | pybind11/pybind11.h |
|
||||||
+------------------------+--------------------------+---------------------+
|
+------------------------+--------------------------+-----------------------+
|
||||||
| std::complex<T> | Complex numbers | pybind/complex.h |
|
| std::complex<T> | Complex numbers | pybind11/complex.h |
|
||||||
+------------------------+--------------------------+---------------------+
|
+------------------------+--------------------------+-----------------------+
|
||||||
| std::vector<T> | STL dynamic array | pybind/stl.h |
|
| std::vector<T> | STL dynamic array | pybind11/stl.h |
|
||||||
+------------------------+--------------------------+---------------------+
|
+------------------------+--------------------------+-----------------------+
|
||||||
| std::map<T1, T2> | STL dynamic maps | pybind/stl.h |
|
| std::map<T1, T2> | STL dynamic maps | pybind11/stl.h |
|
||||||
+------------------------+--------------------------+---------------------+
|
+------------------------+--------------------------+-----------------------+
|
||||||
| std::function<...> | STL polymorphic function | pybind/functional.h |
|
| std::function<...> | STL polymorphic function | pybind11/functional.h |
|
||||||
+------------------------+--------------------------+---------------------+
|
+------------------------+--------------------------+-----------------------+
|
||||||
|
|
||||||
|
|
||||||
.. [#f1] In practice, implementation and binding code will generally be located
|
.. [#f1] In practice, implementation and binding code will generally be located
|
||||||
|
@ -23,12 +23,12 @@ The binding code for ``Pet`` looks as follows:
|
|||||||
|
|
||||||
.. code-block:: cpp
|
.. code-block:: cpp
|
||||||
|
|
||||||
#include <pybind/pybind.h>
|
#include <pybind11/pybind11.h>
|
||||||
|
|
||||||
namespace py = pybind;
|
namespace py = pybind11
|
||||||
|
|
||||||
PYBIND_PLUGIN(example) {
|
PYBIND_PLUGIN(example) {
|
||||||
py::module m("example", "pybind example plugin");
|
py::module m("example", "pybind11 example plugin");
|
||||||
|
|
||||||
py::class_<Pet>(m, "Pet")
|
py::class_<Pet>(m, "Pet")
|
||||||
.def(py::init<const std::string &>())
|
.def(py::init<const std::string &>())
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
Please be advised that the reference documentation discussing pybind11
|
Please be advised that the reference documentation discussing pybind11
|
||||||
internals is currently incomplete. Please refer to the previous sections
|
internals is currently incomplete. Please refer to the previous sections
|
||||||
and the pybind header files for the nitty gritty details.
|
and the pybind11 header files for the nitty gritty details.
|
||||||
|
|
||||||
Reference
|
Reference
|
||||||
#########
|
#########
|
||||||
@ -22,7 +22,7 @@ Macros
|
|||||||
.. code-block:: cpp
|
.. code-block:: cpp
|
||||||
|
|
||||||
PYBIND_PLUGIN(example) {
|
PYBIND_PLUGIN(example) {
|
||||||
pybind::module m("example", "pybind example plugin");
|
pybind11::module m("example", "pybind11 example plugin");
|
||||||
/// Set up bindings here
|
/// Set up bindings here
|
||||||
return m.ptr();
|
return m.ptr();
|
||||||
}
|
}
|
||||||
@ -188,9 +188,9 @@ Convenience classes for specific Python types
|
|||||||
|
|
||||||
.. code-block:: cpp
|
.. code-block:: cpp
|
||||||
|
|
||||||
pybind::module m("example", "pybind example plugin");
|
pybind11::module m("example", "pybind11 example plugin");
|
||||||
pybind::module m2 = m.def_submodule("sub", "A submodule of 'example'");
|
pybind11::module m2 = m.def_submodule("sub", "A submodule of 'example'");
|
||||||
pybind::module m3 = m2.def_submodule("subsub", "A submodule of 'example.sub'");
|
pybind11::module m3 = m2.def_submodule("subsub", "A submodule of 'example.sub'");
|
||||||
|
|
||||||
.. cpp:function:: template <typename Func, typename ... Extra> module& module::def(const char *name, Func && f, Extra && ... extra)
|
.. cpp:function:: template <typename Func, typename ... Extra> module& module::def(const char *name, Func && f, Extra && ... extra)
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#include <pybind/pybind.h>
|
#include <pybind11/pybind11.h>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
using std::cout;
|
using std::cout;
|
||||||
using std::endl;
|
using std::endl;
|
||||||
|
|
||||||
namespace py = pybind;
|
namespace py = pybind11;
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "example.h"
|
#include "example.h"
|
||||||
#include <pybind/numpy.h>
|
#include <pybind11/numpy.h>
|
||||||
|
|
||||||
double my_func(int x, float y, double z) {
|
double my_func(int x, float y, double z) {
|
||||||
std::cout << "my_func(x:int=" << x << ", y:float=" << y << ", z:float=" << z << ")" << std::endl;
|
std::cout << "my_func(x:int=" << x << ", y:float=" << y << ", z:float=" << z << ")" << std::endl;
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "example.h"
|
#include "example.h"
|
||||||
#include <pybind/functional.h>
|
#include <pybind11/functional.h>
|
||||||
|
|
||||||
/* This is an example class that we'll want to be able to extend from Python */
|
/* This is an example class that we'll want to be able to extend from Python */
|
||||||
class Example12 {
|
class Example12 {
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "example.h"
|
#include "example.h"
|
||||||
#include <pybind/stl.h>
|
#include <pybind11/stl.h>
|
||||||
|
|
||||||
class Example2 {
|
class Example2 {
|
||||||
public:
|
public:
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "example.h"
|
#include "example.h"
|
||||||
#include <pybind/operators.h>
|
#include <pybind11/operators.h>
|
||||||
|
|
||||||
class Vector2 {
|
class Vector2 {
|
||||||
public:
|
public:
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "example.h"
|
#include "example.h"
|
||||||
#include <pybind/functional.h>
|
#include <pybind11/functional.h>
|
||||||
|
|
||||||
|
|
||||||
class Pet {
|
class Pet {
|
||||||
|
@ -9,8 +9,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "example.h"
|
#include "example.h"
|
||||||
#include <pybind/operators.h>
|
#include <pybind11/operators.h>
|
||||||
#include <pybind/stl.h>
|
#include <pybind11/stl.h>
|
||||||
|
|
||||||
class Sequence {
|
class Sequence {
|
||||||
public:
|
public:
|
||||||
|
@ -32,10 +32,7 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
/// Make pybind aware of the ref-counted wrapper type
|
/// Make pybind aware of the ref-counted wrapper type
|
||||||
namespace pybind { namespace detail {
|
PYBIND_DECLARE_HOLDER_TYPE(T, ref<T>);
|
||||||
template <typename T> class type_caster<ref<T>>
|
|
||||||
: public type_caster_holder<T, ref<T>> { };
|
|
||||||
}}
|
|
||||||
|
|
||||||
Object *make_object_1() { return new MyObject(1); }
|
Object *make_object_1() { return new MyObject(1); }
|
||||||
ref<Object> make_object_2() { return new MyObject(2); }
|
ref<Object> make_object_2() { return new MyObject(2); }
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
pybind/cast.h: Partial template specializations to cast between
|
pybind11/cast.h: Partial template specializations to cast between
|
||||||
C++ and Python types
|
C++ and Python types
|
||||||
|
|
||||||
Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
|
Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
|
||||||
@ -10,12 +10,12 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <pybind/pytypes.h>
|
#include "pytypes.h"
|
||||||
#include <pybind/typeid.h>
|
#include "typeid.h"
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <limits>
|
#include <limits>
|
||||||
|
|
||||||
NAMESPACE_BEGIN(pybind)
|
NAMESPACE_BEGIN(pybind11)
|
||||||
NAMESPACE_BEGIN(detail)
|
NAMESPACE_BEGIN(detail)
|
||||||
|
|
||||||
#if defined(_MSC_VER)
|
#if defined(_MSC_VER)
|
||||||
@ -527,6 +527,12 @@ protected:
|
|||||||
holder_type holder;
|
holder_type holder;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define PYBIND_DECLARE_HOLDER_TYPE(type, holder_type) \
|
||||||
|
namespace pybind11 { namespace detail { \
|
||||||
|
template <typename type> class type_caster<holder_type> \
|
||||||
|
: public type_caster_holder<type, holder_type> { }; \
|
||||||
|
}}
|
||||||
|
|
||||||
template <> class type_caster<handle> {
|
template <> class type_caster<handle> {
|
||||||
public:
|
public:
|
||||||
bool load(PyObject *src) {
|
bool load(PyObject *src) {
|
||||||
@ -571,7 +577,7 @@ template <typename T> inline object cast(const T &value, return_value_policy pol
|
|||||||
return object(detail::type_caster<typename detail::decay<T>::type>::cast(value, policy, parent), false);
|
return object(detail::type_caster<typename detail::decay<T>::type>::cast(value, policy, parent), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T> inline T handle::cast() { return pybind::cast<T>(m_ptr); }
|
template <typename T> inline T handle::cast() { return pybind11::cast<T>(m_ptr); }
|
||||||
template <> inline void handle::cast() { return; }
|
template <> inline void handle::cast() { return; }
|
||||||
|
|
||||||
template <typename... Args> inline object handle::call(Args&&... args_) {
|
template <typename... Args> inline object handle::call(Args&&... args_) {
|
||||||
@ -601,4 +607,4 @@ template <typename... Args> inline object handle::call(Args&&... args_) {
|
|||||||
return object(result, false);
|
return object(result, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
NAMESPACE_END(pybind)
|
NAMESPACE_END(pybind11)
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
pybind/common.h -- Basic macros
|
pybind11/common.h -- Basic macros
|
||||||
|
|
||||||
Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
|
Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
|
||||||
|
|
||||||
@ -68,7 +68,7 @@
|
|||||||
extern "C" PYBIND_EXPORT PyObject *init##name()
|
extern "C" PYBIND_EXPORT PyObject *init##name()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
NAMESPACE_BEGIN(pybind)
|
NAMESPACE_BEGIN(pybind11)
|
||||||
|
|
||||||
typedef Py_ssize_t ssize_t;
|
typedef Py_ssize_t ssize_t;
|
||||||
|
|
||||||
@ -192,7 +192,7 @@ NAMESPACE_END(detail)
|
|||||||
struct stop_iteration : public std::runtime_error { public: stop_iteration(const std::string &w="") : std::runtime_error(w) {} };
|
struct stop_iteration : public std::runtime_error { public: stop_iteration(const std::string &w="") : std::runtime_error(w) {} };
|
||||||
struct index_error : public std::runtime_error { public: index_error(const std::string &w="") : std::runtime_error(w) {} };
|
struct index_error : public std::runtime_error { public: index_error(const std::string &w="") : std::runtime_error(w) {} };
|
||||||
struct error_already_set : public std::runtime_error { public: error_already_set() : std::runtime_error(detail::error_string()) {} };
|
struct error_already_set : public std::runtime_error { public: error_already_set() : std::runtime_error(detail::error_string()) {} };
|
||||||
/// Thrown when pybind::cast or handle::call fail due to a type casting error
|
/// Thrown when pybind11::cast or handle::call fail due to a type casting error
|
||||||
struct cast_error : public std::runtime_error { public: cast_error(const std::string &w = "") : std::runtime_error(w) {} };
|
struct cast_error : public std::runtime_error { public: cast_error(const std::string &w = "") : std::runtime_error(w) {} };
|
||||||
|
|
||||||
NAMESPACE_END(pybind)
|
NAMESPACE_END(pybind11)
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
pybind/complex.h: Complex number support
|
pybind11/complex.h: Complex number support
|
||||||
|
|
||||||
Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
|
Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
|
||||||
|
|
||||||
@ -9,10 +9,10 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <pybind/pybind.h>
|
#include "pybind11.h"
|
||||||
#include <complex>
|
#include <complex>
|
||||||
|
|
||||||
NAMESPACE_BEGIN(pybind)
|
NAMESPACE_BEGIN(pybind11)
|
||||||
|
|
||||||
PYBIND_DECL_FMT(std::complex<float>, "Zf");
|
PYBIND_DECL_FMT(std::complex<float>, "Zf");
|
||||||
PYBIND_DECL_FMT(std::complex<double>, "Zd");
|
PYBIND_DECL_FMT(std::complex<double>, "Zd");
|
||||||
@ -37,4 +37,4 @@ public:
|
|||||||
PYBIND_TYPE_CASTER(std::complex<T>, "complex");
|
PYBIND_TYPE_CASTER(std::complex<T>, "complex");
|
||||||
};
|
};
|
||||||
NAMESPACE_END(detail)
|
NAMESPACE_END(detail)
|
||||||
NAMESPACE_END(pybind)
|
NAMESPACE_END(pybind11)
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
pybind/functional.h: std::function<> support
|
pybind11/functional.h: std::function<> support
|
||||||
|
|
||||||
Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
|
Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
|
||||||
|
|
||||||
@ -9,10 +9,10 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <pybind/pybind.h>
|
#include "pybind11.h"
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
NAMESPACE_BEGIN(pybind)
|
NAMESPACE_BEGIN(pybind11)
|
||||||
NAMESPACE_BEGIN(detail)
|
NAMESPACE_BEGIN(detail)
|
||||||
|
|
||||||
template <typename Return, typename... Args> struct type_caster<std::function<Return(Args...)>> {
|
template <typename Return, typename... Args> struct type_caster<std::function<Return(Args...)>> {
|
||||||
@ -24,7 +24,7 @@ public:
|
|||||||
return false;
|
return false;
|
||||||
object src(src_, true);
|
object src(src_, true);
|
||||||
value = [src](Args... args) -> Return {
|
value = [src](Args... args) -> Return {
|
||||||
object retval(pybind::handle(src).call(std::move(args)...));
|
object retval(pybind11::handle(src).call(std::move(args)...));
|
||||||
/* Visual studio 2015 parser issue: need parentheses around this expression */
|
/* Visual studio 2015 parser issue: need parentheses around this expression */
|
||||||
return (retval.template cast<Return>());
|
return (retval.template cast<Return>());
|
||||||
};
|
};
|
||||||
@ -46,4 +46,4 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
NAMESPACE_END(detail)
|
NAMESPACE_END(detail)
|
||||||
NAMESPACE_END(pybind)
|
NAMESPACE_END(pybind11)
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
pybind/numpy.h: Basic NumPy support, auto-vectorization support
|
pybind11/numpy.h: Basic NumPy support, auto-vectorization support
|
||||||
|
|
||||||
Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
|
Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
|
||||||
|
|
||||||
@ -9,15 +9,15 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <pybind/pybind.h>
|
#include "pybind11.h"
|
||||||
#include <pybind/complex.h>
|
#include "complex.h"
|
||||||
|
|
||||||
#if defined(_MSC_VER)
|
#if defined(_MSC_VER)
|
||||||
#pragma warning(push)
|
#pragma warning(push)
|
||||||
#pragma warning(disable: 4127) // warning C4127: Conditional expression is constant
|
#pragma warning(disable: 4127) // warning C4127: Conditional expression is constant
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
NAMESPACE_BEGIN(pybind)
|
NAMESPACE_BEGIN(pybind11)
|
||||||
|
|
||||||
template <typename type> struct npy_format_descriptor { };
|
template <typename type> struct npy_format_descriptor { };
|
||||||
|
|
||||||
@ -196,7 +196,7 @@ struct vectorize_helper {
|
|||||||
/* Check if the parameters are actually compatible */
|
/* Check if the parameters are actually compatible */
|
||||||
for (size_t i=0; i<N; ++i) {
|
for (size_t i=0; i<N; ++i) {
|
||||||
if (buffers[i].count != 1 && (buffers[i].ndim != ndim || buffers[i].shape != shape))
|
if (buffers[i].count != 1 && (buffers[i].ndim != ndim || buffers[i].shape != shape))
|
||||||
throw std::runtime_error("pybind::vectorize: incompatible size/dimension of inputs!");
|
throw std::runtime_error("pybind11::vectorize: incompatible size/dimension of inputs!");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Call the function */
|
/* Call the function */
|
||||||
@ -234,7 +234,7 @@ template <typename func> auto vectorize(func &&f) -> decltype(
|
|||||||
&std::remove_reference<func>::type::operator())>::type *) nullptr);
|
&std::remove_reference<func>::type::operator())>::type *) nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
NAMESPACE_END(pybind)
|
NAMESPACE_END(pybind11)
|
||||||
|
|
||||||
#if defined(_MSC_VER)
|
#if defined(_MSC_VER)
|
||||||
#pragma warning(pop)
|
#pragma warning(pop)
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
pybind/operator.h: Metatemplates for operator overloading
|
pybind11/operator.h: Metatemplates for operator overloading
|
||||||
|
|
||||||
Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
|
Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
|
||||||
|
|
||||||
@ -9,10 +9,10 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <pybind/pybind.h>
|
#include "pybind11.h"
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
|
|
||||||
NAMESPACE_BEGIN(pybind)
|
NAMESPACE_BEGIN(pybind11)
|
||||||
NAMESPACE_BEGIN(detail)
|
NAMESPACE_BEGIN(detail)
|
||||||
|
|
||||||
/// Enumeration with all supported operator types
|
/// Enumeration with all supported operator types
|
||||||
@ -45,13 +45,13 @@ template <op_id, op_type, typename B, typename L, typename R> struct op_impl { }
|
|||||||
|
|
||||||
/// Operator implementation generator
|
/// Operator implementation generator
|
||||||
template <op_id id, op_type ot, typename L, typename R> struct op_ {
|
template <op_id id, op_type ot, typename L, typename R> struct op_ {
|
||||||
template <typename Base, typename Holder, typename... Extra> void execute(pybind::class_<Base, Holder> &class_, Extra&&... extra) const {
|
template <typename Base, typename Holder, typename... Extra> void execute(pybind11::class_<Base, Holder> &class_, Extra&&... extra) const {
|
||||||
typedef typename std::conditional<std::is_same<L, self_t>::value, Base, L>::type L_type;
|
typedef typename std::conditional<std::is_same<L, self_t>::value, Base, L>::type L_type;
|
||||||
typedef typename std::conditional<std::is_same<R, self_t>::value, Base, R>::type R_type;
|
typedef typename std::conditional<std::is_same<R, self_t>::value, Base, R>::type R_type;
|
||||||
typedef op_impl<id, ot, Base, L_type, R_type> op;
|
typedef op_impl<id, ot, Base, L_type, R_type> op;
|
||||||
class_.def(op::name(), &op::execute, std::forward<Extra>(extra)...);
|
class_.def(op::name(), &op::execute, std::forward<Extra>(extra)...);
|
||||||
}
|
}
|
||||||
template <typename Base, typename Holder, typename... Extra> void execute_cast(pybind::class_<Base, Holder> &class_, Extra&&... extra) const {
|
template <typename Base, typename Holder, typename... Extra> void execute_cast(pybind11::class_<Base, Holder> &class_, Extra&&... extra) const {
|
||||||
typedef typename std::conditional<std::is_same<L, self_t>::value, Base, L>::type L_type;
|
typedef typename std::conditional<std::is_same<L, self_t>::value, Base, L>::type L_type;
|
||||||
typedef typename std::conditional<std::is_same<R, self_t>::value, Base, R>::type R_type;
|
typedef typename std::conditional<std::is_same<R, self_t>::value, Base, R>::type R_type;
|
||||||
typedef op_impl<id, ot, Base, L_type, R_type> op;
|
typedef op_impl<id, ot, Base, L_type, R_type> op;
|
||||||
@ -146,4 +146,4 @@ NAMESPACE_END(detail)
|
|||||||
|
|
||||||
using detail::self;
|
using detail::self;
|
||||||
|
|
||||||
NAMESPACE_END(pybind)
|
NAMESPACE_END(pybind11)
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
pybind/pybind.h: Main header file of the C++11 python binding generator library
|
pybind11/pybind11.h: Main header file of the C++11 python binding generator library
|
||||||
|
|
||||||
Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
|
Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
|
||||||
|
|
||||||
@ -23,9 +23,9 @@
|
|||||||
#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
|
#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <pybind/cast.h>
|
#include "cast.h"
|
||||||
|
|
||||||
NAMESPACE_BEGIN(pybind)
|
NAMESPACE_BEGIN(pybind11)
|
||||||
|
|
||||||
template <typename T> struct arg_t;
|
template <typename T> struct arg_t;
|
||||||
|
|
||||||
@ -113,31 +113,31 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void process_extra(const char *doc, function_entry *entry, const char **, const char **) { entry->doc = doc; }
|
static void process_extra(const char *doc, function_entry *entry, const char **, const char **) { entry->doc = doc; }
|
||||||
static void process_extra(const pybind::doc &d, function_entry *entry, const char **, const char **) { entry->doc = d.value; }
|
static void process_extra(const pybind11::doc &d, function_entry *entry, const char **, const char **) { entry->doc = d.value; }
|
||||||
static void process_extra(const pybind::name &n, function_entry *entry, const char **, const char **) { entry->name = n.value; }
|
static void process_extra(const pybind11::name &n, function_entry *entry, const char **, const char **) { entry->name = n.value; }
|
||||||
static void process_extra(const pybind::arg &a, function_entry *entry, const char **kw, const char **) {
|
static void process_extra(const pybind11::arg &a, function_entry *entry, const char **kw, const char **) {
|
||||||
if (entry->is_method && entry->keywords == 0)
|
if (entry->is_method && entry->keywords == 0)
|
||||||
kw[entry->keywords++] = "self";
|
kw[entry->keywords++] = "self";
|
||||||
kw[entry->keywords++] = a.name;
|
kw[entry->keywords++] = a.name;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
static void process_extra(const pybind::arg_t<T> &a, function_entry *entry, const char **kw, const char **def) {
|
static void process_extra(const pybind11::arg_t<T> &a, function_entry *entry, const char **kw, const char **def) {
|
||||||
if (entry->is_method && entry->keywords == 0)
|
if (entry->is_method && entry->keywords == 0)
|
||||||
kw[entry->keywords++] = "self";
|
kw[entry->keywords++] = "self";
|
||||||
kw[entry->keywords] = a.name;
|
kw[entry->keywords] = a.name;
|
||||||
def[entry->keywords++] = strdup(detail::to_string(a.value).c_str());
|
def[entry->keywords++] = strdup(detail::to_string(a.value).c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
static void process_extra(const pybind::is_method &m, function_entry *entry, const char **, const char **) {
|
static void process_extra(const pybind11::is_method &m, function_entry *entry, const char **, const char **) {
|
||||||
entry->is_method = true;
|
entry->is_method = true;
|
||||||
entry->class_ = m.class_;
|
entry->class_ = m.class_;
|
||||||
}
|
}
|
||||||
static void process_extra(const pybind::return_value_policy p, function_entry *entry, const char **, const char **) { entry->policy = p; }
|
static void process_extra(const pybind11::return_value_policy p, function_entry *entry, const char **, const char **) { entry->policy = p; }
|
||||||
static void process_extra(pybind::sibling s, function_entry *entry, const char **, const char **) { entry->sibling = s.value; }
|
static void process_extra(pybind11::sibling s, function_entry *entry, const char **, const char **) { entry->sibling = s.value; }
|
||||||
|
|
||||||
template <typename T> static void process_extra(T, int &, PyObject *, PyObject *) { }
|
template <typename T> static void process_extra(T, int &, PyObject *, PyObject *) { }
|
||||||
static void process_extra(const pybind::arg &a, int &index, PyObject *args, PyObject *kwargs) {
|
static void process_extra(const pybind11::arg &a, int &index, PyObject *args, PyObject *kwargs) {
|
||||||
if (kwargs) {
|
if (kwargs) {
|
||||||
if (PyTuple_GET_ITEM(args, index) != nullptr) {
|
if (PyTuple_GET_ITEM(args, index) != nullptr) {
|
||||||
index++;
|
index++;
|
||||||
@ -152,7 +152,7 @@ private:
|
|||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
template <typename T>
|
template <typename T>
|
||||||
static void process_extra(const pybind::arg_t<T> &a, int &index, PyObject *args, PyObject *kwargs) {
|
static void process_extra(const pybind11::arg_t<T> &a, int &index, PyObject *args, PyObject *kwargs) {
|
||||||
if (PyTuple_GET_ITEM(args, index) != nullptr) {
|
if (PyTuple_GET_ITEM(args, index) != nullptr) {
|
||||||
index++;
|
index++;
|
||||||
return;
|
return;
|
||||||
@ -327,7 +327,7 @@ private:
|
|||||||
PyObject *inst = PyTuple_GetItem(args, 0);
|
PyObject *inst = PyTuple_GetItem(args, 0);
|
||||||
const detail::type_info *type_info =
|
const detail::type_info *type_info =
|
||||||
capsule(PyObject_GetAttrString((PyObject *) Py_TYPE(inst),
|
capsule(PyObject_GetAttrString((PyObject *) Py_TYPE(inst),
|
||||||
const_cast<char *>("__pybind__")), false);
|
const_cast<char *>("__pybind11__")), false);
|
||||||
type_info->init_holder(inst);
|
type_info->init_holder(inst);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@ -360,7 +360,7 @@ private:
|
|||||||
throw std::runtime_error(
|
throw std::runtime_error(
|
||||||
"cpp_function(): function \"" + std::string(m_entry->name) + "\" takes " +
|
"cpp_function(): function \"" + std::string(m_entry->name) + "\" takes " +
|
||||||
std::to_string(args) + " arguments, but " + std::to_string(m_entry->keywords) +
|
std::to_string(args) + " arguments, but " + std::to_string(m_entry->keywords) +
|
||||||
" pybind::arg entries were specified!");
|
" pybind11::arg entries were specified!");
|
||||||
|
|
||||||
m_entry->is_constructor = !strcmp(m_entry->name, "__init__");
|
m_entry->is_constructor = !strcmp(m_entry->name, "__init__");
|
||||||
m_entry->signature = descr.str();
|
m_entry->signature = descr.str();
|
||||||
@ -462,7 +462,7 @@ public:
|
|||||||
+ std::string(".") + std::string(name);
|
+ std::string(".") + std::string(name);
|
||||||
module result(PyImport_AddModule(full_name.c_str()), true);
|
module result(PyImport_AddModule(full_name.c_str()), true);
|
||||||
if (doc)
|
if (doc)
|
||||||
result.attr("__doc__") = pybind::str(doc);
|
result.attr("__doc__") = pybind11::str(doc);
|
||||||
attr(name) = result;
|
attr(name) = result;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -493,7 +493,7 @@ public:
|
|||||||
Py_INCREF(name);
|
Py_INCREF(name);
|
||||||
std::string full_name(name_);
|
std::string full_name(name_);
|
||||||
|
|
||||||
pybind::str scope_name = (object) scope.attr("__name__"),
|
pybind11::str scope_name = (object) scope.attr("__name__"),
|
||||||
module_name = (object) scope.attr("__module__");
|
module_name = (object) scope.attr("__module__");
|
||||||
|
|
||||||
if (scope_name.check())
|
if (scope_name.check())
|
||||||
@ -538,7 +538,7 @@ public:
|
|||||||
type_info.type = (PyTypeObject *) m_ptr;
|
type_info.type = (PyTypeObject *) m_ptr;
|
||||||
type_info.type_size = type_size;
|
type_info.type_size = type_size;
|
||||||
type_info.init_holder = init_holder;
|
type_info.init_holder = init_holder;
|
||||||
attr("__pybind__") = capsule(&type_info);
|
attr("__pybind11__") = capsule(&type_info);
|
||||||
|
|
||||||
scope.attr(name) = *this;
|
scope.attr(name) = *this;
|
||||||
}
|
}
|
||||||
@ -584,7 +584,7 @@ protected:
|
|||||||
|
|
||||||
static PyObject *new_instance(PyTypeObject *type, PyObject *, PyObject *) {
|
static PyObject *new_instance(PyTypeObject *type, PyObject *, PyObject *) {
|
||||||
const detail::type_info *type_info = capsule(
|
const detail::type_info *type_info = capsule(
|
||||||
PyObject_GetAttrString((PyObject *) type, const_cast<char*>("__pybind__")), false);
|
PyObject_GetAttrString((PyObject *) type, const_cast<char*>("__pybind11__")), false);
|
||||||
instance<void> *self = (instance<void> *) PyType_GenericAlloc(type, 0);
|
instance<void> *self = (instance<void> *) PyType_GenericAlloc(type, 0);
|
||||||
self->value = ::operator new(type_info->type_size);
|
self->value = ::operator new(type_info->type_size);
|
||||||
self->owned = true;
|
self->owned = true;
|
||||||
@ -619,13 +619,13 @@ protected:
|
|||||||
#endif
|
#endif
|
||||||
type->as_buffer.bf_getbuffer = getbuffer;
|
type->as_buffer.bf_getbuffer = getbuffer;
|
||||||
type->as_buffer.bf_releasebuffer = releasebuffer;
|
type->as_buffer.bf_releasebuffer = releasebuffer;
|
||||||
auto info = ((detail::type_info *) capsule(attr("__pybind__")));
|
auto info = ((detail::type_info *) capsule(attr("__pybind11__")));
|
||||||
info->get_buffer = get_buffer;
|
info->get_buffer = get_buffer;
|
||||||
info->get_buffer_data = get_buffer_data;
|
info->get_buffer_data = get_buffer_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int getbuffer(PyObject *obj, Py_buffer *view, int flags) {
|
static int getbuffer(PyObject *obj, Py_buffer *view, int flags) {
|
||||||
auto const &typeinfo = ((detail::type_info *) capsule(handle(obj).attr("__pybind__")));
|
auto const &typeinfo = ((detail::type_info *) capsule(handle(obj).attr("__pybind11__")));
|
||||||
|
|
||||||
if (view == nullptr || obj == nullptr || !typeinfo || !typeinfo->get_buffer) {
|
if (view == nullptr || obj == nullptr || !typeinfo || !typeinfo->get_buffer) {
|
||||||
PyErr_SetString(PyExc_BufferError, "Internal error");
|
PyErr_SetString(PyExc_BufferError, "Internal error");
|
||||||
@ -776,7 +776,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
class_ &def_property(const char *name, const cpp_function &fget, const cpp_function &fset, const char *doc = nullptr) {
|
class_ &def_property(const char *name, const cpp_function &fget, const cpp_function &fset, const char *doc = nullptr) {
|
||||||
object doc_obj = doc ? pybind::str(doc) : (object) const_cast<cpp_function&>(fget).attr("__doc__");
|
object doc_obj = doc ? pybind11::str(doc) : (object) const_cast<cpp_function&>(fget).attr("__doc__");
|
||||||
object property(
|
object property(
|
||||||
PyObject_CallFunction((PyObject *)&PyProperty_Type,
|
PyObject_CallFunction((PyObject *)&PyProperty_Type,
|
||||||
const_cast<char *>("OOOO"), fget.ptr() ? fget.ptr() : Py_None,
|
const_cast<char *>("OOOO"), fget.ptr() ? fget.ptr() : Py_None,
|
||||||
@ -786,7 +786,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
class_ &def_property_static(const char *name, const cpp_function &fget, const cpp_function &fset, const char *doc = nullptr) {
|
class_ &def_property_static(const char *name, const cpp_function &fget, const cpp_function &fset, const char *doc = nullptr) {
|
||||||
object doc_obj = doc ? pybind::str(doc) : (object) const_cast<cpp_function&>(fget).attr("__doc__");
|
object doc_obj = doc ? pybind11::str(doc) : (object) const_cast<cpp_function&>(fget).attr("__doc__");
|
||||||
object property(
|
object property(
|
||||||
PyObject_CallFunction((PyObject *)&PyProperty_Type,
|
PyObject_CallFunction((PyObject *)&PyProperty_Type,
|
||||||
const_cast<char *>("OOOs"), fget.ptr() ? fget.ptr() : Py_None,
|
const_cast<char *>("OOOs"), fget.ptr() ? fget.ptr() : Py_None,
|
||||||
@ -796,7 +796,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename target> class_ alias() {
|
template <typename target> class_ alias() {
|
||||||
auto &instances = pybind::detail::get_internals().registered_types;
|
auto &instances = pybind11::detail::get_internals().registered_types;
|
||||||
instances[&typeid(target)] = instances[&typeid(type)];
|
instances[&typeid(target)] = instances[&typeid(type)];
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
@ -846,7 +846,7 @@ public:
|
|||||||
|
|
||||||
/// Add an enumeration entry
|
/// Add an enumeration entry
|
||||||
enum_& value(char const* name, Type value) {
|
enum_& value(char const* name, Type value) {
|
||||||
this->attr(name) = pybind::cast(value, return_value_policy::copy);
|
this->attr(name) = pybind11::cast(value, return_value_policy::copy);
|
||||||
(*m_entries)[(int) value] = name;
|
(*m_entries)[(int) value] = name;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
@ -857,7 +857,7 @@ private:
|
|||||||
|
|
||||||
NAMESPACE_BEGIN(detail)
|
NAMESPACE_BEGIN(detail)
|
||||||
template <typename... Args> struct init {
|
template <typename... Args> struct init {
|
||||||
template <typename Base, typename Holder, typename... Extra> void execute(pybind::class_<Base, Holder> &class_, Extra&&... extra) const {
|
template <typename Base, typename Holder, typename... Extra> void execute(pybind11::class_<Base, Holder> &class_, Extra&&... extra) const {
|
||||||
/// Function which calls a specific C++ in-place constructor
|
/// Function which calls a specific C++ in-place constructor
|
||||||
class_.def("__init__", [](Base *instance, Args... args) { new (instance) Base(args...); }, std::forward<Extra>(extra)...);
|
class_.def("__init__", [](Base *instance, Args... args) { new (instance) Base(args...); }, std::forward<Extra>(extra)...);
|
||||||
}
|
}
|
||||||
@ -919,15 +919,15 @@ inline function get_overload(const void *this_ptr, const char *name) {
|
|||||||
return function();
|
return function();
|
||||||
}
|
}
|
||||||
PyFrameObject *frame = PyThreadState_Get()->frame;
|
PyFrameObject *frame = PyThreadState_Get()->frame;
|
||||||
pybind::str caller = pybind::handle(frame->f_code->co_name).str();
|
pybind11::str caller = pybind11::handle(frame->f_code->co_name).str();
|
||||||
if (strcmp((const char *) caller, name) == 0)
|
if (strcmp((const char *) caller, name) == 0)
|
||||||
return function();
|
return function();
|
||||||
return overload;
|
return overload;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define PYBIND_OVERLOAD_INT(ret_type, class_name, name, ...) { \
|
#define PYBIND_OVERLOAD_INT(ret_type, class_name, name, ...) { \
|
||||||
pybind::gil_scoped_acquire gil; \
|
pybind11::gil_scoped_acquire gil; \
|
||||||
pybind::function overload = pybind::get_overload(this, #name); \
|
pybind11::function overload = pybind11::get_overload(this, #name); \
|
||||||
if (overload) \
|
if (overload) \
|
||||||
return overload.call(__VA_ARGS__).cast<ret_type>(); }
|
return overload.call(__VA_ARGS__).cast<ret_type>(); }
|
||||||
|
|
||||||
@ -939,7 +939,7 @@ inline function get_overload(const void *this_ptr, const char *name) {
|
|||||||
PYBIND_OVERLOAD_INT(ret_type, class_name, name, __VA_ARGS__) \
|
PYBIND_OVERLOAD_INT(ret_type, class_name, name, __VA_ARGS__) \
|
||||||
throw std::runtime_error("Tried to call pure virtual function \"" #name "\"");
|
throw std::runtime_error("Tried to call pure virtual function \"" #name "\"");
|
||||||
|
|
||||||
NAMESPACE_END(pybind)
|
NAMESPACE_END(pybind11)
|
||||||
|
|
||||||
#if defined(_MSC_VER)
|
#if defined(_MSC_VER)
|
||||||
#pragma warning(pop)
|
#pragma warning(pop)
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
pybind/typeid.h: Convenience wrapper classes for basic Python types
|
pybind11/typeid.h: Convenience wrapper classes for basic Python types
|
||||||
|
|
||||||
Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
|
Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
|
||||||
|
|
||||||
@ -9,10 +9,10 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <pybind/common.h>
|
#include "common.h"
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
NAMESPACE_BEGIN(pybind)
|
NAMESPACE_BEGIN(pybind11)
|
||||||
|
|
||||||
/* A few forward declarations */
|
/* A few forward declarations */
|
||||||
class object;
|
class object;
|
||||||
@ -37,7 +37,7 @@ public:
|
|||||||
inline detail::accessor operator[](const char *key);
|
inline detail::accessor operator[](const char *key);
|
||||||
inline detail::accessor attr(handle key);
|
inline detail::accessor attr(handle key);
|
||||||
inline detail::accessor attr(const char *key);
|
inline detail::accessor attr(const char *key);
|
||||||
inline pybind::str str() const;
|
inline pybind11::str str() const;
|
||||||
template <typename T> T cast();
|
template <typename T> T cast();
|
||||||
template <typename ... Args> object call(Args&&... args_);
|
template <typename ... Args> object call(Args&&... args_);
|
||||||
operator bool() const { return m_ptr != nullptr; }
|
operator bool() const { return m_ptr != nullptr; }
|
||||||
@ -230,13 +230,13 @@ private:
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
inline pybind::str handle::str() const {
|
inline pybind11::str handle::str() const {
|
||||||
PyObject *str = PyObject_Str(m_ptr);
|
PyObject *str = PyObject_Str(m_ptr);
|
||||||
#if PY_MAJOR_VERSION < 3
|
#if PY_MAJOR_VERSION < 3
|
||||||
PyObject *unicode = PyUnicode_FromEncodedObject(str, "utf-8", nullptr);
|
PyObject *unicode = PyUnicode_FromEncodedObject(str, "utf-8", nullptr);
|
||||||
Py_XDECREF(str); str = unicode;
|
Py_XDECREF(str); str = unicode;
|
||||||
#endif
|
#endif
|
||||||
return pybind::str(str, false);
|
return pybind11::str(str, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
class bool_ : public object {
|
class bool_ : public object {
|
||||||
@ -370,12 +370,12 @@ inline internals &get_internals() {
|
|||||||
if (internals_ptr)
|
if (internals_ptr)
|
||||||
return *internals_ptr;
|
return *internals_ptr;
|
||||||
handle builtins(PyEval_GetBuiltins());
|
handle builtins(PyEval_GetBuiltins());
|
||||||
capsule caps(builtins["__pybind__"]);
|
capsule caps(builtins["__pybind11__"]);
|
||||||
if (caps.check()) {
|
if (caps.check()) {
|
||||||
internals_ptr = caps;
|
internals_ptr = caps;
|
||||||
} else {
|
} else {
|
||||||
internals_ptr = new internals();
|
internals_ptr = new internals();
|
||||||
builtins["__pybind__"] = capsule(internals_ptr);
|
builtins["__pybind11__"] = capsule(internals_ptr);
|
||||||
}
|
}
|
||||||
return *internals_ptr;
|
return *internals_ptr;
|
||||||
}
|
}
|
||||||
@ -413,4 +413,4 @@ inline handle get_type_handle(const std::type_info &tp) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
NAMESPACE_END(detail)
|
NAMESPACE_END(detail)
|
||||||
NAMESPACE_END(pybind)
|
NAMESPACE_END(pybind11)
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
pybind/complex.h: Complex number support
|
pybind11/complex.h: Complex number support
|
||||||
|
|
||||||
Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
|
Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
|
||||||
|
|
||||||
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <pybind/pybind.h>
|
#include "pybind11.h"
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
@ -19,7 +19,7 @@
|
|||||||
#pragma warning(disable: 4127) // warning C4127: Conditional expression is constant
|
#pragma warning(disable: 4127) // warning C4127: Conditional expression is constant
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
NAMESPACE_BEGIN(pybind)
|
NAMESPACE_BEGIN(pybind11)
|
||||||
NAMESPACE_BEGIN(detail)
|
NAMESPACE_BEGIN(detail)
|
||||||
|
|
||||||
template <typename Value> struct type_caster<std::vector<Value>> {
|
template <typename Value> struct type_caster<std::vector<Value>> {
|
||||||
@ -104,7 +104,7 @@ NAMESPACE_END(detail)
|
|||||||
|
|
||||||
inline std::ostream &operator<<(std::ostream &os, const object &obj) { os << (const char *) obj.str(); return os; }
|
inline std::ostream &operator<<(std::ostream &os, const object &obj) { os << (const char *) obj.str(); return os; }
|
||||||
|
|
||||||
NAMESPACE_END(pybind)
|
NAMESPACE_END(pybind11)
|
||||||
|
|
||||||
#if defined(_MSC_VER)
|
#if defined(_MSC_VER)
|
||||||
#pragma warning(pop)
|
#pragma warning(pop)
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
pybind/typeid.h: Compiler-independent access to type identifiers
|
pybind11/typeid.h: Compiler-independent access to type identifiers
|
||||||
|
|
||||||
Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
|
Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
|
||||||
|
|
||||||
@ -9,14 +9,13 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <pybind/typeid.h>
|
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#if defined(__GNUG__)
|
#if defined(__GNUG__)
|
||||||
#include <cxxabi.h>
|
#include <cxxabi.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
NAMESPACE_BEGIN(pybind)
|
NAMESPACE_BEGIN(pybind11)
|
||||||
NAMESPACE_BEGIN(detail)
|
NAMESPACE_BEGIN(detail)
|
||||||
/// Erase all occurrences of a substring
|
/// Erase all occurrences of a substring
|
||||||
inline void erase_all(std::string &string, const std::string &search) {
|
inline void erase_all(std::string &string, const std::string &search) {
|
||||||
@ -39,7 +38,7 @@ inline void clean_type_id(std::string &name) {
|
|||||||
detail::erase_all(name, "struct ");
|
detail::erase_all(name, "struct ");
|
||||||
detail::erase_all(name, "enum ");
|
detail::erase_all(name, "enum ");
|
||||||
#endif
|
#endif
|
||||||
detail::erase_all(name, "pybind::");
|
detail::erase_all(name, "pybind11::");
|
||||||
}
|
}
|
||||||
NAMESPACE_END(detail)
|
NAMESPACE_END(detail)
|
||||||
|
|
||||||
@ -50,4 +49,4 @@ template <typename T> static std::string type_id() {
|
|||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
NAMESPACE_END(pybind)
|
NAMESPACE_END(pybind11)
|
Loading…
Reference in New Issue
Block a user