Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
D
dlib
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
钟尚武
dlib
Commits
beece207
Commit
beece207
authored
Feb 11, 2018
by
Davis King
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Updated to pybind11 2.2.2
parent
5bde5c52
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
156 additions
and
152 deletions
+156
-152
README.md
dlib/external/pybind11/README.md
+3
-2
cast.h
dlib/external/pybind11/include/pybind11/cast.h
+26
-18
complex.h
dlib/external/pybind11/include/pybind11/complex.h
+0
-4
class.h
dlib/external/pybind11/include/pybind11/detail/class.h
+5
-1
common.h
dlib/external/pybind11/include/pybind11/detail/common.h
+11
-22
descr.h
dlib/external/pybind11/include/pybind11/detail/descr.h
+0
-0
init.h
dlib/external/pybind11/include/pybind11/detail/init.h
+16
-6
internals.h
dlib/external/pybind11/include/pybind11/detail/internals.h
+12
-10
eigen.h
dlib/external/pybind11/include/pybind11/eigen.h
+30
-32
embed.h
dlib/external/pybind11/include/pybind11/embed.h
+1
-1
functional.h
dlib/external/pybind11/include/pybind11/functional.h
+4
-2
numpy.h
dlib/external/pybind11/include/pybind11/numpy.h
+38
-42
pybind11.h
dlib/external/pybind11/include/pybind11/pybind11.h
+0
-0
pytypes.h
dlib/external/pybind11/include/pybind11/pytypes.h
+0
-3
stl.h
dlib/external/pybind11/include/pybind11/stl.h
+8
-7
stl_bind.h
dlib/external/pybind11/include/pybind11/stl_bind.h
+1
-1
FindPythonLibsNew.cmake
dlib/external/pybind11/tools/FindPythonLibsNew.cmake
+1
-1
No files found.
dlib/external/pybind11/README.md
View file @
beece207
...
...
@@ -87,8 +87,9 @@ In addition to the core functionality, pybind11 provides some extra goodies:
[
reported
](
http://graylab.jhu.edu/RosettaCon2016/PyRosetta-4.pdf
)
a binary
size reduction of
**5.4x**
and compile time reduction by
**5.8x**
.
-
Function signatures are precomputed at compile time (using
``constexpr``
),
leading to smaller binaries.
-
When supported by the compiler, two new C++14 features (relaxed constexpr and
return value deduction) are used to precompute function signatures at compile
time, leading to smaller binaries.
-
With little extra effort, C++ types can be pickled and unpickled similar to
regular Python objects.
...
...
dlib/external/pybind11/include/pybind11/cast.h
View file @
beece207
...
...
@@ -778,7 +778,7 @@ template <typename T1, typename T2> struct is_copy_constructible<std::pair<T1, T
template
<
typename
type
>
class
type_caster_base
:
public
type_caster_generic
{
using
itype
=
intrinsic_t
<
type
>
;
public
:
static
constexpr
auto
name
=
_
<
type
>
();
static
PYBIND11_DESCR
name
()
{
return
type_descr
(
_
<
type
>
());
}
type_caster_base
()
:
type_caster_base
(
typeid
(
type
))
{
}
explicit
type_caster_base
(
const
std
::
type_info
&
info
)
:
type_caster_generic
(
info
)
{
}
...
...
@@ -835,7 +835,7 @@ public:
nullptr
,
nullptr
,
holder
);
}
template
<
typename
T
>
using
cast_op_type
=
detail
::
cast_op_type
<
T
>
;
template
<
typename
T
>
using
cast_op_type
=
cast_op_type
<
T
>
;
operator
itype
*
()
{
return
(
type
*
)
value
;
}
operator
itype
&
()
{
if
(
!
value
)
throw
reference_cast_error
();
return
*
((
itype
*
)
value
);
}
...
...
@@ -885,7 +885,7 @@ private:
"std::reference_wrapper<T> caster requires T to have a caster with an `T &` operator"
);
public
:
bool
load
(
handle
src
,
bool
convert
)
{
return
subcaster
.
load
(
src
,
convert
);
}
static
constexpr
auto
name
=
caster_t
::
name
;
static
PYBIND11_DESCR
name
()
{
return
caster_t
::
name
();
}
static
handle
cast
(
const
std
::
reference_wrapper
<
type
>
&
src
,
return_value_policy
policy
,
handle
parent
)
{
// It is definitely wrong to take ownership of this pointer, so mask that rvp
if
(
policy
==
return_value_policy
::
take_ownership
||
policy
==
return_value_policy
::
automatic
)
...
...
@@ -900,7 +900,7 @@ public:
protected: \
type value; \
public: \
static
constexpr auto name = py_name;
\
static
PYBIND11_DESCR name() { return type_descr(py_name); }
\
template <typename T_, enable_if_t<std::is_same<type, remove_cv_t<T_>>::value, int> = 0> \
static handle cast(T_ *src, return_value_policy policy, handle parent) { \
if (!src) return none().release(); \
...
...
@@ -980,12 +980,11 @@ public:
static
handle
cast
(
T
src
,
return_value_policy
/* policy */
,
handle
/* parent */
)
{
if
(
std
::
is_floating_point
<
T
>::
value
)
{
return
PyFloat_FromDouble
((
double
)
src
);
}
else
if
(
sizeof
(
T
)
<=
sizeof
(
ssize_t
))
{
// This returns a long automatically if needed
}
else
if
(
sizeof
(
T
)
<=
sizeof
(
long
))
{
if
(
std
::
is_signed
<
T
>::
value
)
return
P
YBIND11_LONG_FROM_SIGNED
(
src
);
return
P
yLong_FromLong
((
long
)
src
);
else
return
P
YBIND11_LONG_FROM_UNSIGNED
(
src
);
return
P
yLong_FromUnsignedLong
((
unsigned
long
)
src
);
}
else
{
if
(
std
::
is_signed
<
T
>::
value
)
return
PyLong_FromLongLong
((
long
long
)
src
);
...
...
@@ -1050,7 +1049,7 @@ public:
template
<
typename
T
>
using
cast_op_type
=
void
*&
;
operator
void
*&
()
{
return
value
;
}
static
constexpr
auto
name
=
_
(
"capsule"
);
static
PYBIND11_DESCR
name
()
{
return
type_descr
(
_
(
"capsule"
));
}
private
:
void
*
value
=
nullptr
;
};
...
...
@@ -1293,7 +1292,7 @@ public:
return
one_char
;
}
static
constexpr
auto
name
=
_
(
PYBIND11_STRING_NAME
);
static
PYBIND11_DESCR
name
()
{
return
type_descr
(
_
(
PYBIND11_STRING_NAME
));
}
template
<
typename
_T
>
using
cast_op_type
=
pybind11
::
detail
::
cast_op_type
<
_T
>
;
};
...
...
@@ -1318,7 +1317,9 @@ public:
return
cast_impl
(
std
::
forward
<
T
>
(
src
),
policy
,
parent
,
indices
{});
}
static
constexpr
auto
name
=
_
(
"Tuple["
)
+
concat
(
make_caster
<
Ts
>::
name
...)
+
_
(
"]"
);
static
PYBIND11_DESCR
name
()
{
return
type_descr
(
_
(
"Tuple["
)
+
detail
::
concat
(
make_caster
<
Ts
>::
name
()...)
+
_
(
"]"
));
}
template
<
typename
T
>
using
cast_op_type
=
type
;
...
...
@@ -1463,7 +1464,7 @@ struct move_only_holder_caster {
auto
*
ptr
=
holder_helper
<
holder_type
>::
get
(
src
);
return
type_caster_base
<
type
>::
cast_holder
(
ptr
,
&
src
);
}
static
constexpr
auto
name
=
type_caster_base
<
type
>::
name
;
static
PYBIND11_DESCR
name
()
{
return
type_caster_base
<
type
>::
name
();
}
};
template
<
typename
type
,
typename
deleter
>
...
...
@@ -1494,10 +1495,10 @@ template <typename base, typename holder> struct is_holder_type :
template
<
typename
base
,
typename
deleter
>
struct
is_holder_type
<
base
,
std
::
unique_ptr
<
base
,
deleter
>>
:
std
::
true_type
{};
template
<
typename
T
>
struct
handle_type_name
{
static
constexpr
auto
name
=
_
<
T
>
();
};
template
<>
struct
handle_type_name
<
bytes
>
{
static
constexpr
auto
name
=
_
(
PYBIND11_BYTES_NAME
);
};
template
<>
struct
handle_type_name
<
args
>
{
static
constexpr
auto
name
=
_
(
"*args"
);
};
template
<>
struct
handle_type_name
<
kwargs
>
{
static
constexpr
auto
name
=
_
(
"**kwargs"
);
};
template
<
typename
T
>
struct
handle_type_name
{
static
PYBIND11_DESCR
name
()
{
return
_
<
T
>
();
}
};
template
<>
struct
handle_type_name
<
bytes
>
{
static
PYBIND11_DESCR
name
()
{
return
_
(
PYBIND11_BYTES_NAME
);
}
};
template
<>
struct
handle_type_name
<
args
>
{
static
PYBIND11_DESCR
name
()
{
return
_
(
"*args"
);
}
};
template
<>
struct
handle_type_name
<
kwargs
>
{
static
PYBIND11_DESCR
name
()
{
return
_
(
"**kwargs"
);
}
};
template
<
typename
type
>
struct
pyobject_caster
{
...
...
@@ -1515,7 +1516,7 @@ struct pyobject_caster {
static
handle
cast
(
const
handle
&
src
,
return_value_policy
/* policy */
,
handle
/* parent */
)
{
return
src
.
inc_ref
();
}
PYBIND11_TYPE_CASTER
(
type
,
handle_type_name
<
type
>::
name
);
PYBIND11_TYPE_CASTER
(
type
,
handle_type_name
<
type
>::
name
()
);
};
template
<
typename
T
>
...
...
@@ -1685,6 +1686,9 @@ template <> inline void cast_safe<void>(object &&) {}
NAMESPACE_END
(
detail
)
template
<
return_value_policy
policy
=
return_value_policy
::
automatic_reference
>
tuple
make_tuple
()
{
return
tuple
(
0
);
}
template
<
return_value_policy
policy
=
return_value_policy
::
automatic_reference
,
typename
...
Args
>
tuple
make_tuple
(
Args
&&
...
args_
)
{
constexpr
size_t
size
=
sizeof
...(
Args
);
...
...
@@ -1801,6 +1805,10 @@ struct function_call {
/// The `convert` value the arguments should be loaded with
std
::
vector
<
bool
>
args_convert
;
/// Extra references for the optional `py::args` and/or `py::kwargs` arguments (which, if
/// present, are also in `args` but without a reference).
object
args_ref
,
kwargs_ref
;
/// The parent, if any
handle
parent
;
...
...
@@ -1828,7 +1836,7 @@ public:
static
constexpr
bool
has_kwargs
=
kwargs_pos
<
0
;
static
constexpr
bool
has_args
=
args_pos
<
0
;
static
constexpr
auto
arg_names
=
concat
(
type_descr
(
make_caster
<
Args
>::
name
)...);
static
PYBIND11_DESCR
arg_names
()
{
return
detail
::
concat
(
make_caster
<
Args
>::
name
()...);
}
bool
load_args
(
function_call
&
call
)
{
return
load_impl_sequence
(
call
,
indices
{});
...
...
dlib/external/pybind11/include/pybind11/complex.h
View file @
beece207
...
...
@@ -25,13 +25,9 @@ template <typename T> struct format_descriptor<std::complex<T>, detail::enable_i
static
std
::
string
format
()
{
return
std
::
string
(
value
);
}
};
#ifndef PYBIND11_CPP17
template
<
typename
T
>
constexpr
const
char
format_descriptor
<
std
::
complex
<
T
>
,
detail
::
enable_if_t
<
std
::
is_floating_point
<
T
>::
value
>>::
value
[
3
];
#endif
NAMESPACE_BEGIN
(
detail
)
template
<
typename
T
>
struct
is_fmt_numeric
<
std
::
complex
<
T
>
,
detail
::
enable_if_t
<
std
::
is_floating_point
<
T
>::
value
>>
{
...
...
dlib/external/pybind11/include/pybind11/detail/class.h
View file @
beece207
...
...
@@ -289,9 +289,13 @@ extern "C" inline int pybind11_object_init(PyObject *self, PyObject *, PyObject
inline
void
add_patient
(
PyObject
*
nurse
,
PyObject
*
patient
)
{
auto
&
internals
=
get_internals
();
auto
instance
=
reinterpret_cast
<
detail
::
instance
*>
(
nurse
);
auto
&
current_patients
=
internals
.
patients
[
nurse
];
instance
->
has_patients
=
true
;
for
(
auto
&
p
:
current_patients
)
if
(
p
==
patient
)
return
;
Py_INCREF
(
patient
);
internals
.
patients
[
nurse
]
.
push_back
(
patient
);
current_patients
.
push_back
(
patient
);
}
inline
void
clear_patients
(
PyObject
*
self
)
{
...
...
dlib/external/pybind11/include/pybind11/detail/common.h
View file @
beece207
...
...
@@ -92,8 +92,8 @@
#endif
#define PYBIND11_VERSION_MAJOR 2
#define PYBIND11_VERSION_MINOR
3
#define PYBIND11_VERSION_PATCH
dev0
#define PYBIND11_VERSION_MINOR
2
#define PYBIND11_VERSION_PATCH
2
/// Include Python header, disable linking to pythonX_d.lib on Windows in debug mode
#if defined(_MSC_VER)
...
...
@@ -158,8 +158,6 @@
#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
...
...
@@ -182,8 +180,6 @@
#define PYBIND11_BYTES_SIZE PyString_Size
#define PYBIND11_LONG_CHECK(o) (PyInt_Check(o) || PyLong_Check(o))
#define PYBIND11_LONG_AS_LONGLONG(o) (PyInt_Check(o) ? (long long) PyLong_AsLong(o) : PyLong_AsLongLong(o))
#define PYBIND11_LONG_FROM_SIGNED(o) PyInt_FromSsize_t((ssize_t) o) // Returns long if needed.
#define PYBIND11_LONG_FROM_UNSIGNED(o) PyInt_FromSize_t((size_t) o) // Returns long if needed.
#define PYBIND11_BYTES_NAME "str"
#define PYBIND11_STRING_NAME "unicode"
#define PYBIND11_SLICE_OBJECT PySliceObject
...
...
@@ -381,18 +377,20 @@ constexpr size_t instance_simple_holder_in_ptrs() {
struct
type_info
;
struct
value_and_holder
;
struct
nonsimple_values_and_holders
{
void
**
values_and_holders
;
uint8_t
*
status
;
};
/// The 'instance' type which needs to be standard layout (need to be able to use 'offsetof')
struct
instance
{
PyObject_HEAD
/// Storage for pointers and holder; see simple_layout, below, for a description
union
{
void
*
simple_value_holder
[
1
+
instance_simple_holder_in_ptrs
()];
struct
{
void
**
values_and_holders
;
uint8_t
*
status
;
}
nonsimple
;
nonsimple_values_and_holders
nonsimple
;
};
/// Weak references
/// Weak references
(needed for keep alive):
PyObject
*
weakrefs
;
/// If true, the pointer is owned which means we're free to manage it with a holder.
bool
owned
:
1
;
...
...
@@ -409,10 +407,10 @@ struct instance {
* (which is typically the size of two pointers), or when multiple inheritance is used on the
* python side. Non-simple layout allocates the required amount of memory to have multiple
* bound C++ classes as parents. Under this layout, `nonsimple.values_and_holders` is set to a
* pointer to allocated space of the required space to hold a sequence of value pointers and
* pointer to allocated space of the required space to hold a
a
sequence of value pointers and
* holders followed `status`, a set of bit flags (1 byte each), i.e.
* [val1*][holder1][val2*][holder2]...[bb...] where each [block] is rounded up to a multiple of
* `sizeof(void *)`. `nonsimple.
status
` is, for convenience, a pointer to the
* `sizeof(void *)`. `nonsimple.
holder_constructed
` is, for convenience, a pointer to the
* beginning of the [bb...] block (but not independently allocated).
*
* Status bits indicate whether the associated holder is constructed (&
...
...
@@ -585,11 +583,6 @@ template <typename T, typename... Us> using deferred_t = typename deferred_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 also requires that the base type is accessible (i.e. that a Derived pointer
/// can be converted to a Base pointer)
template
<
typename
Base
,
typename
Derived
>
using
is_accessible_base_of
=
bool_constant
<
std
::
is_base_of
<
Base
,
Derived
>::
value
&&
std
::
is_convertible
<
Derived
*
,
Base
*>::
value
>
;
template
<
template
<
typename
...
>
class
Base
>
struct
is_template_base_of_impl
{
template
<
typename
...
Us
>
static
std
::
true_type
check
(
Base
<
Us
...
>
*
);
...
...
@@ -708,13 +701,9 @@ template <typename T> struct format_descriptor<T, detail::enable_if_t<std::is_ar
static
std
::
string
format
()
{
return
std
::
string
(
1
,
c
);
}
};
#if !defined(PYBIND11_CPP17)
template
<
typename
T
>
constexpr
const
char
format_descriptor
<
T
,
detail
::
enable_if_t
<
std
::
is_arithmetic
<
T
>::
value
>>::
value
[
2
];
#endif
/// RAII wrapper that temporarily clears any Python error state
struct
error_scope
{
PyObject
*
type
,
*
value
,
*
trace
;
...
...
dlib/external/pybind11/include/pybind11/detail/descr.h
View file @
beece207
This diff is collapsed.
Click to expand it.
dlib/external/pybind11/include/pybind11/detail/init.h
View file @
beece207
...
...
@@ -24,7 +24,7 @@ public:
template
<
typename
>
using
cast_op_type
=
value_and_holder
&
;
operator
value_and_holder
&
()
{
return
*
value
;
}
static
constexpr
auto
name
=
_
<
value_and_holder
>
();
static
PYBIND11_DESCR
name
()
{
return
type_descr
(
_
<
value_and_holder
>
());
}
private
:
value_and_holder
*
value
=
nullptr
;
...
...
@@ -52,6 +52,16 @@ bool is_alias(Cpp<Class> *ptr) {
template
<
typename
/*Class*/
>
constexpr
bool
is_alias
(
void
*
)
{
return
false
;
}
// Constructs and returns a new object; if the given arguments don't map to a constructor, we fall
// back to brace aggregate initiailization so that for aggregate initialization can be used with
// py::init, e.g. `py::init<int, int>` to initialize a `struct T { int a; int b; }`. For
// non-aggregate types, we need to use an ordinary T(...) constructor (invoking as `T{...}` usually
// works, but will not do the expected thing when `T` has an `initializer_list<T>` constructor).
template
<
typename
Class
,
typename
...
Args
,
detail
::
enable_if_t
<
std
::
is_constructible
<
Class
,
Args
...
>::
value
,
int
>
=
0
>
inline
Class
*
construct_or_initialize
(
Args
&&
...
args
)
{
return
new
Class
(
std
::
forward
<
Args
>
(
args
)...);
}
template
<
typename
Class
,
typename
...
Args
,
detail
::
enable_if_t
<!
std
::
is_constructible
<
Class
,
Args
...
>::
value
,
int
>
=
0
>
inline
Class
*
construct_or_initialize
(
Args
&&
...
args
)
{
return
new
Class
{
std
::
forward
<
Args
>
(
args
)...};
}
// Attempts to constructs an alias using a `Alias(Cpp &&)` constructor. This allows types with
// an alias to provide only a single Cpp factory function as long as the Alias can be
// constructed from an rvalue reference of the base Cpp type. This means that Alias classes
...
...
@@ -161,7 +171,7 @@ struct constructor {
template
<
typename
Class
,
typename
...
Extra
,
enable_if_t
<!
Class
::
has_alias
,
int
>
=
0
>
static
void
execute
(
Class
&
cl
,
const
Extra
&
...
extra
)
{
cl
.
def
(
"__init__"
,
[](
value_and_holder
&
v_h
,
Args
...
args
)
{
v_h
.
value_ptr
()
=
new
Cpp
<
Class
>
{
std
::
forward
<
Args
>
(
args
)...}
;
v_h
.
value_ptr
()
=
construct_or_initialize
<
Cpp
<
Class
>>
(
std
::
forward
<
Args
>
(
args
)...)
;
},
is_new_style_constructor
(),
extra
...);
}
...
...
@@ -171,9 +181,9 @@ struct constructor {
static
void
execute
(
Class
&
cl
,
const
Extra
&
...
extra
)
{
cl
.
def
(
"__init__"
,
[](
value_and_holder
&
v_h
,
Args
...
args
)
{
if
(
Py_TYPE
(
v_h
.
inst
)
==
v_h
.
type
->
type
)
v_h
.
value_ptr
()
=
new
Cpp
<
Class
>
{
std
::
forward
<
Args
>
(
args
)...}
;
v_h
.
value_ptr
()
=
construct_or_initialize
<
Cpp
<
Class
>>
(
std
::
forward
<
Args
>
(
args
)...)
;
else
v_h
.
value_ptr
()
=
new
Alias
<
Class
>
{
std
::
forward
<
Args
>
(
args
)...}
;
v_h
.
value_ptr
()
=
construct_or_initialize
<
Alias
<
Class
>>
(
std
::
forward
<
Args
>
(
args
)...)
;
},
is_new_style_constructor
(),
extra
...);
}
...
...
@@ -182,7 +192,7 @@ struct constructor {
!
std
::
is_constructible
<
Cpp
<
Class
>
,
Args
...
>::
value
,
int
>
=
0
>
static
void
execute
(
Class
&
cl
,
const
Extra
&
...
extra
)
{
cl
.
def
(
"__init__"
,
[](
value_and_holder
&
v_h
,
Args
...
args
)
{
v_h
.
value_ptr
()
=
new
Alias
<
Class
>
{
std
::
forward
<
Args
>
(
args
)...}
;
v_h
.
value_ptr
()
=
construct_or_initialize
<
Alias
<
Class
>>
(
std
::
forward
<
Args
>
(
args
)...)
;
},
is_new_style_constructor
(),
extra
...);
}
};
...
...
@@ -193,7 +203,7 @@ template <typename... Args> struct alias_constructor {
enable_if_t
<
Class
::
has_alias
&&
std
::
is_constructible
<
Alias
<
Class
>
,
Args
...
>::
value
,
int
>
=
0
>
static
void
execute
(
Class
&
cl
,
const
Extra
&
...
extra
)
{
cl
.
def
(
"__init__"
,
[](
value_and_holder
&
v_h
,
Args
...
args
)
{
v_h
.
value_ptr
()
=
new
Alias
<
Class
>
{
std
::
forward
<
Args
>
(
args
)...}
;
v_h
.
value_ptr
()
=
construct_or_initialize
<
Alias
<
Class
>>
(
std
::
forward
<
Args
>
(
args
)...)
;
},
is_new_style_constructor
(),
extra
...);
}
};
...
...
dlib/external/pybind11/include/pybind11/detail/internals.h
View file @
beece207
...
...
@@ -127,21 +127,21 @@ struct type_info {
/// Each module locally stores a pointer to the `internals` data. The data
/// itself is shared among modules with the same `PYBIND11_INTERNALS_ID`.
inline
internals
*
&
get_internals_ptr
()
{
static
internals
*
internals_ptr
=
nullptr
;
return
internals_p
tr
;
inline
internals
*
*&
get_internals_pp
()
{
static
internals
*
*
internals_pp
=
nullptr
;
return
internals_p
p
;
}
/// Return a reference to the current `internals` data
PYBIND11_NOINLINE
inline
internals
&
get_internals
()
{
auto
*
&
internals_ptr
=
get_internals_ptr
();
if
(
internals_p
tr
)
return
*
internals_ptr
;
auto
*
*&
internals_pp
=
get_internals_pp
();
if
(
internals_p
p
&&
*
internals_pp
)
return
*
*
internals_pp
;
constexpr
auto
*
id
=
PYBIND11_INTERNALS_ID
;
auto
builtins
=
handle
(
PyEval_GetBuiltins
());
if
(
builtins
.
contains
(
id
)
&&
isinstance
<
capsule
>
(
builtins
[
id
]))
{
internals_p
tr
=
*
static_cast
<
internals
**>
(
capsule
(
builtins
[
id
]));
internals_p
p
=
static_cast
<
internals
**>
(
capsule
(
builtins
[
id
]));
// We loaded builtins through python's builtins, which means that our `error_already_set`
// and `builtin_exception` may be different local classes than the ones set up in the
...
...
@@ -149,7 +149,7 @@ PYBIND11_NOINLINE inline internals &get_internals() {
//
// libstdc++ doesn't require this (types there are identified only by name)
#if !defined(__GLIBCXX__)
internals_ptr
->
registered_exception_translators
.
push_front
(
(
*
internals_pp
)
->
registered_exception_translators
.
push_front
(
[](
std
::
exception_ptr
p
)
->
void
{
try
{
if
(
p
)
std
::
rethrow_exception
(
p
);
...
...
@@ -160,6 +160,8 @@ PYBIND11_NOINLINE inline internals &get_internals() {
);
#endif
}
else
{
if
(
!
internals_pp
)
internals_pp
=
new
internals
*
();
auto
*&
internals_ptr
=
*
internals_pp
;
internals_ptr
=
new
internals
();
#if defined(WITH_THREAD)
PyEval_InitThreads
();
...
...
@@ -168,7 +170,7 @@ PYBIND11_NOINLINE inline internals &get_internals() {
PyThread_set_key_value
(
internals_ptr
->
tstate
,
tstate
);
internals_ptr
->
istate
=
tstate
->
interp
;
#endif
builtins
[
id
]
=
capsule
(
&
internals_ptr
);
builtins
[
id
]
=
capsule
(
internals_pp
);
internals_ptr
->
registered_exception_translators
.
push_front
(
[](
std
::
exception_ptr
p
)
->
void
{
try
{
...
...
@@ -192,7 +194,7 @@ PYBIND11_NOINLINE inline internals &get_internals() {
internals_ptr
->
default_metaclass
=
make_default_metaclass
();
internals_ptr
->
instance_base
=
make_object_base_type
(
internals_ptr
->
default_metaclass
);
}
return
*
internals_ptr
;
return
*
*
internals_pp
;
}
/// Works like `internals.registered_types_cpp`, but for module-local registered types:
...
...
dlib/external/pybind11/include/pybind11/eigen.h
View file @
beece207
...
...
@@ -17,24 +17,20 @@
# pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Wconversion"
# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
# ifdef __clang__
// Eigen generates a bunch of implicit-copy-constructor-is-deprecated warnings with -Wdeprecated
// under Clang, so disable that warning here:
# pragma GCC diagnostic ignored "-Wdeprecated"
# endif
# if __GNUC__ >= 7
# pragma GCC diagnostic ignored "-Wint-in-bool-context"
# endif
#endif
#include <Eigen/Core>
#include <Eigen/SparseCore>
#if defined(_MSC_VER)
# pragma warning(push)
# pragma warning(disable: 4127) // warning C4127: Conditional expression is constant
# pragma warning(disable: 4996) // warning C4996: std::unary_negate is deprecated in C++17
#endif
#include <Eigen/Core>
#include <Eigen/SparseCore>
// Eigen prior to 3.2.7 doesn't have proper move constructors--but worse, some classes get implicit
// move constructors that break things. We could detect this an explicitly copy, but an extra copy
// of matrices seems highly undesirable.
...
...
@@ -185,26 +181,28 @@ template <typename Type_> struct EigenProps {
}
}
static
constexpr
bool
show_writeable
=
is_eigen_dense_map
<
Type
>::
value
&&
is_eigen_mutable_map
<
Type
>::
value
;
static
constexpr
bool
show_order
=
is_eigen_dense_map
<
Type
>::
value
;
static
constexpr
bool
show_c_contiguous
=
show_order
&&
requires_row_major
;
static
constexpr
bool
show_f_contiguous
=
!
show_c_contiguous
&&
show_order
&&
requires_col_major
;
static
constexpr
auto
descriptor
=
_
(
"numpy.ndarray["
)
+
npy_format_descriptor
<
Scalar
>::
name
+
_
(
"["
)
+
_
<
fixed_rows
>
(
_
<
(
size_t
)
rows
>
(),
_
(
"m"
))
+
_
(
", "
)
+
_
<
fixed_cols
>
(
_
<
(
size_t
)
cols
>
(),
_
(
"n"
))
+
_
(
"]"
)
+
// For a reference type (e.g. Ref<MatrixXd>) we have other constraints that might need to be
// satisfied: writeable=True (for a mutable reference), and, depending on the map's stride
// options, possibly f_contiguous or c_contiguous. We include them in the descriptor output
// to provide some hint as to why a TypeError is occurring (otherwise it can be confusing to
// see that a function accepts a 'numpy.ndarray[float64[3,2]]' and an error message that you
// *gave* a numpy.ndarray of the right type and dimensions.
_
<
show_writeable
>
(
", flags.writeable"
,
""
)
+
_
<
show_c_contiguous
>
(
", flags.c_contiguous"
,
""
)
+
_
<
show_f_contiguous
>
(
", flags.f_contiguous"
,
""
)
+
_
(
"]"
);
static
PYBIND11_DESCR
descriptor
()
{
constexpr
bool
show_writeable
=
is_eigen_dense_map
<
Type
>::
value
&&
is_eigen_mutable_map
<
Type
>::
value
;
constexpr
bool
show_order
=
is_eigen_dense_map
<
Type
>::
value
;
constexpr
bool
show_c_contiguous
=
show_order
&&
requires_row_major
;
constexpr
bool
show_f_contiguous
=
!
show_c_contiguous
&&
show_order
&&
requires_col_major
;
return
type_descr
(
_
(
"numpy.ndarray["
)
+
npy_format_descriptor
<
Scalar
>::
name
()
+
_
(
"["
)
+
_
<
fixed_rows
>
(
_
<
(
size_t
)
rows
>
(),
_
(
"m"
))
+
_
(
", "
)
+
_
<
fixed_cols
>
(
_
<
(
size_t
)
cols
>
(),
_
(
"n"
))
+
_
(
"]"
)
+
// For a reference type (e.g. Ref<MatrixXd>) we have other constraints that might need to be
// satisfied: writeable=True (for a mutable reference), and, depending on the map's stride
// options, possibly f_contiguous or c_contiguous. We include them in the descriptor output
// to provide some hint as to why a TypeError is occurring (otherwise it can be confusing to
// see that a function accepts a 'numpy.ndarray[float64[3,2]]' and an error message that you
// *gave* a numpy.ndarray of the right type and dimensions.
_
<
show_writeable
>
(
", flags.writeable"
,
""
)
+
_
<
show_c_contiguous
>
(
", flags.c_contiguous"
,
""
)
+
_
<
show_f_contiguous
>
(
", flags.f_contiguous"
,
""
)
+
_
(
"]"
)
);
}
};
// Casts an Eigen type to numpy array. If given a base, the numpy array references the src data,
...
...
@@ -341,7 +339,7 @@ public:
return
cast_impl
(
src
,
policy
,
parent
);
}
static
constexpr
auto
name
=
props
::
descriptor
;
static
PYBIND11_DESCR
name
()
{
return
props
::
descriptor
();
}
operator
Type
*
()
{
return
&
value
;
}
operator
Type
&
()
{
return
value
;
}
...
...
@@ -389,7 +387,7 @@ public:
}
}
static
constexpr
auto
name
=
props
::
descriptor
;
static
PYBIND11_DESCR
name
()
{
return
props
::
descriptor
();
}
// Explicitly delete these: support python -> C++ conversion on these (i.e. these can be return
// types but not bound arguments). We still provide them (with an explicitly delete) so that
...
...
@@ -534,7 +532,7 @@ public:
}
static
handle
cast
(
const
Type
*
src
,
return_value_policy
policy
,
handle
parent
)
{
return
cast
(
*
src
,
policy
,
parent
);
}
static
constexpr
auto
name
=
props
::
descriptor
;
static
PYBIND11_DESCR
name
()
{
return
props
::
descriptor
();
}
// Explicitly delete these: support python -> C++ conversion on these (i.e. these can be return
// types but not bound arguments). We still provide them (with an explicitly delete) so that
...
...
@@ -601,7 +599,7 @@ struct type_caster<Type, enable_if_t<is_eigen_sparse<Type>::value>> {
}
PYBIND11_TYPE_CASTER
(
Type
,
_
<
(
Type
::
IsRowMajor
)
!=
0
>
(
"scipy.sparse.csr_matrix["
,
"scipy.sparse.csc_matrix["
)
+
npy_format_descriptor
<
Scalar
>::
name
+
_
(
"]"
));
+
npy_format_descriptor
<
Scalar
>::
name
()
+
_
(
"]"
));
};
NAMESPACE_END
(
detail
)
...
...
dlib/external/pybind11/include/pybind11/embed.h
View file @
beece207
...
...
@@ -145,7 +145,7 @@ inline void finalize_interpreter() {
// Get the internals pointer (without creating it if it doesn't exist). It's possible for the
// internals to be created during Py_Finalize() (e.g. if a py::capsule calls `get_internals()`
// during destruction), so we get the pointer-pointer here and check it after Py_Finalize().
detail
::
internals
**
internals_ptr_ptr
=
&
detail
::
get_internals_ptr
();
detail
::
internals
**
internals_ptr_ptr
=
detail
::
get_internals_pp
();
// It could also be stashed in builtins, so look there too:
if
(
builtins
.
contains
(
id
)
&&
isinstance
<
capsule
>
(
builtins
[
id
]))
internals_ptr_ptr
=
capsule
(
builtins
[
id
]);
...
...
dlib/external/pybind11/include/pybind11/functional.h
View file @
beece207
...
...
@@ -75,8 +75,10 @@ public:
return
cpp_function
(
std
::
forward
<
Func
>
(
f_
),
policy
).
release
();
}
PYBIND11_TYPE_CASTER
(
type
,
_
(
"Callable[["
)
+
concat
(
make_caster
<
Args
>::
name
...)
+
_
(
"], "
)
+
make_caster
<
retval_type
>::
name
+
_
(
"]"
));
PYBIND11_TYPE_CASTER
(
type
,
_
(
"Callable[["
)
+
argument_loader
<
Args
...
>::
arg_names
()
+
_
(
"], "
)
+
make_caster
<
retval_type
>::
name
()
+
_
(
"]"
));
};
NAMESPACE_END
(
detail
)
...
...
dlib/external/pybind11/include/pybind11/numpy.h
View file @
beece207
...
...
@@ -250,7 +250,7 @@ template <typename T> struct array_info_scalar {
typedef
T
type
;
static
constexpr
bool
is_array
=
false
;
static
constexpr
bool
is_empty
=
false
;
static
constexpr
auto
extents
=
_
(
""
);
static
PYBIND11_DESCR
extents
()
{
return
_
(
""
);
}
static
void
append_extents
(
list
&
/* shape */
)
{
}
};
// Computes underlying type and a comma-separated list of extents for array
...
...
@@ -269,9 +269,15 @@ template <typename T, size_t N> struct array_info<std::array<T, N>> {
array_info
<
T
>::
append_extents
(
shape
);
}
static
constexpr
auto
extents
=
_
<
array_info
<
T
>::
is_array
>
(
concat
(
_
<
N
>
(),
array_info
<
T
>::
extents
),
_
<
N
>
()
);
template
<
typename
T2
=
T
,
enable_if_t
<!
array_info
<
T2
>::
is_array
,
int
>
=
0
>
static
PYBIND11_DESCR
extents
()
{
return
_
<
N
>
();
}
template
<
typename
T2
=
T
,
enable_if_t
<
array_info
<
T2
>::
is_array
,
int
>
=
0
>
static
PYBIND11_DESCR
extents
()
{
return
concat
(
_
<
N
>
(),
array_info
<
T
>::
extents
());
}
};
// For numpy we have special handling for arrays of characters, so we don't include
// the size in the array extents.
...
...
@@ -440,7 +446,7 @@ public:
/// This is essentially the same as calling numpy.dtype(args) in Python.
static
dtype
from_args
(
object
args
)
{
PyObject
*
ptr
=
nullptr
;
if
(
!
detail
::
npy_api
::
get
().
PyArray_DescrConverter_
(
args
.
ptr
(),
&
ptr
)
||
!
ptr
)
if
(
!
detail
::
npy_api
::
get
().
PyArray_DescrConverter_
(
args
.
release
().
ptr
(),
&
ptr
)
||
!
ptr
)
throw
error_already_set
();
return
reinterpret_steal
<
dtype
>
(
ptr
);
}
...
...
@@ -940,9 +946,9 @@ struct format_descriptor<T, detail::enable_if_t<std::is_enum<T>::value>> {
template
<
typename
T
>
struct
format_descriptor
<
T
,
detail
::
enable_if_t
<
detail
::
array_info
<
T
>::
is_array
>>
{
static
std
::
string
format
()
{
using
detail
::
_
;
static
constexpr
auto
extents
=
_
(
"("
)
+
detail
::
array_info
<
T
>::
extents
+
_
(
")"
);
return
extents
.
text
+
format_descriptor
<
detail
::
remove_all_extents_t
<
T
>>::
format
();
using
namespace
detail
;
PYBIND11_DESCR
extents
=
_
(
"("
)
+
array_info
<
T
>::
extents
()
+
_
(
")"
);
return
extents
.
text
()
+
format_descriptor
<
remove_all_extents_t
<
T
>>::
format
();
}
};
...
...
@@ -961,7 +967,7 @@ struct pyobject_caster<array_t<T, ExtraFlags>> {
static
handle
cast
(
const
handle
&
src
,
return_value_policy
/* policy */
,
handle
/* parent */
)
{
return
src
.
inc_ref
();
}
PYBIND11_TYPE_CASTER
(
type
,
handle_type_name
<
type
>::
name
);
PYBIND11_TYPE_CASTER
(
type
,
handle_type_name
<
type
>::
name
()
);
};
template
<
typename
T
>
...
...
@@ -971,34 +977,7 @@ struct compare_buffer_info<T, detail::enable_if_t<detail::is_pod_struct<T>::valu
}
};
template
<
typename
T
,
typename
=
void
>
struct
npy_format_descriptor_name
;
template
<
typename
T
>
struct
npy_format_descriptor_name
<
T
,
enable_if_t
<
std
::
is_integral
<
T
>::
value
>>
{
static
constexpr
auto
name
=
_
<
std
::
is_same
<
T
,
bool
>::
value
>
(
_
(
"bool"
),
_
<
std
::
is_signed
<
T
>::
value
>
(
"int"
,
"uint"
)
+
_
<
sizeof
(
T
)
*
8
>
()
);
};
template
<
typename
T
>
struct
npy_format_descriptor_name
<
T
,
enable_if_t
<
std
::
is_floating_point
<
T
>::
value
>>
{
static
constexpr
auto
name
=
_
<
std
::
is_same
<
T
,
float
>::
value
||
std
::
is_same
<
T
,
double
>::
value
>
(
_
(
"float"
)
+
_
<
sizeof
(
T
)
*
8
>
(),
_
(
"longdouble"
)
);
};
template
<
typename
T
>
struct
npy_format_descriptor_name
<
T
,
enable_if_t
<
is_complex
<
T
>::
value
>>
{
static
constexpr
auto
name
=
_
<
std
::
is_same
<
typename
T
::
value_type
,
float
>::
value
||
std
::
is_same
<
typename
T
::
value_type
,
double
>::
value
>
(
_
(
"complex"
)
+
_
<
sizeof
(
typename
T
::
value_type
)
*
16
>
(),
_
(
"longcomplex"
)
);
};
template
<
typename
T
>
struct
npy_format_descriptor
<
T
,
enable_if_t
<
satisfies_any_of
<
T
,
std
::
is_arithmetic
,
is_complex
>::
value
>>
:
npy_format_descriptor_name
<
T
>
{
template
<
typename
T
>
struct
npy_format_descriptor
<
T
,
enable_if_t
<
satisfies_any_of
<
T
,
std
::
is_arithmetic
,
is_complex
>::
value
>>
{
private
:
// NB: the order here must match the one in common.h
constexpr
static
const
int
values
[
15
]
=
{
...
...
@@ -1017,10 +996,25 @@ public:
return
reinterpret_borrow
<
pybind11
::
dtype
>
(
ptr
);
pybind11_fail
(
"Unsupported buffer format!"
);
}
template
<
typename
T2
=
T
,
enable_if_t
<
std
::
is_integral
<
T2
>::
value
,
int
>
=
0
>
static
PYBIND11_DESCR
name
()
{
return
_
<
std
::
is_same
<
T
,
bool
>::
value
>
(
_
(
"bool"
),
_
<
std
::
is_signed
<
T
>::
value
>
(
"int"
,
"uint"
)
+
_
<
sizeof
(
T
)
*
8
>
());
}
template
<
typename
T2
=
T
,
enable_if_t
<
std
::
is_floating_point
<
T2
>::
value
,
int
>
=
0
>
static
PYBIND11_DESCR
name
()
{
return
_
<
std
::
is_same
<
T
,
float
>::
value
||
std
::
is_same
<
T
,
double
>::
value
>
(
_
(
"float"
)
+
_
<
sizeof
(
T
)
*
8
>
(),
_
(
"longdouble"
));
}
template
<
typename
T2
=
T
,
enable_if_t
<
is_complex
<
T2
>::
value
,
int
>
=
0
>
static
PYBIND11_DESCR
name
()
{
return
_
<
std
::
is_same
<
typename
T2
::
value_type
,
float
>::
value
||
std
::
is_same
<
typename
T2
::
value_type
,
double
>::
value
>
(
_
(
"complex"
)
+
_
<
sizeof
(
typename
T2
::
value_type
)
*
16
>
(),
_
(
"longcomplex"
));
}
};
#define PYBIND11_DECL_CHAR_FMT \
static
constexpr auto name = _("S") + _<N>();
\
static
PYBIND11_DESCR name() { return _("S") + _<N>(); }
\
static pybind11::dtype dtype() { return pybind11::dtype(std::string("S") + std::to_string(N)); }
template
<
size_t
N
>
struct
npy_format_descriptor
<
char
[
N
]
>
{
PYBIND11_DECL_CHAR_FMT
};
template
<
size_t
N
>
struct
npy_format_descriptor
<
std
::
array
<
char
,
N
>>
{
PYBIND11_DECL_CHAR_FMT
};
...
...
@@ -1032,7 +1026,7 @@ private:
public
:
static_assert
(
!
array_info
<
T
>::
is_empty
,
"Zero-sized arrays are not supported"
);
static
constexpr
auto
name
=
_
(
"("
)
+
array_info
<
T
>::
extents
+
_
(
")"
)
+
base_descr
::
name
;
static
PYBIND11_DESCR
name
()
{
return
_
(
"("
)
+
array_info
<
T
>::
extents
()
+
_
(
")"
)
+
base_descr
::
name
();
}
static
pybind11
::
dtype
dtype
()
{
list
shape
;
array_info
<
T
>::
append_extents
(
shape
);
...
...
@@ -1044,7 +1038,7 @@ template<typename T> struct npy_format_descriptor<T, enable_if_t<std::is_enum<T>
private
:
using
base_descr
=
npy_format_descriptor
<
typename
std
::
underlying_type
<
T
>::
type
>
;
public
:
static
constexpr
auto
name
=
base_descr
::
name
;
static
PYBIND11_DESCR
name
()
{
return
base_descr
::
name
();
}
static
pybind11
::
dtype
dtype
()
{
return
base_descr
::
dtype
();
}
};
...
...
@@ -1119,7 +1113,7 @@ inline PYBIND11_NOINLINE void register_structured_dtype(
template
<
typename
T
,
typename
SFINAE
>
struct
npy_format_descriptor
{
static_assert
(
is_pod_struct
<
T
>::
value
,
"Attempt to use a non-POD or unimplemented POD type as a numpy dtype"
);
static
constexpr
auto
name
=
make_caster
<
T
>::
name
;
static
PYBIND11_DESCR
name
()
{
return
make_caster
<
T
>::
name
();
}
static
pybind11
::
dtype
dtype
()
{
return
reinterpret_borrow
<
pybind11
::
dtype
>
(
dtype_ptr
());
...
...
@@ -1564,7 +1558,9 @@ vectorize_extractor(const Func &f, Return (*) (Args ...)) {
}
template
<
typename
T
,
int
Flags
>
struct
handle_type_name
<
array_t
<
T
,
Flags
>>
{
static
constexpr
auto
name
=
_
(
"numpy.ndarray["
)
+
npy_format_descriptor
<
T
>::
name
+
_
(
"]"
);
static
PYBIND11_DESCR
name
()
{
return
_
(
"numpy.ndarray["
)
+
npy_format_descriptor
<
T
>::
name
()
+
_
(
"]"
);
}
};
NAMESPACE_END
(
detail
)
...
...
dlib/external/pybind11/include/pybind11/pybind11.h
View file @
beece207
This diff is collapsed.
Click to expand it.
dlib/external/pybind11/include/pybind11/pytypes.h
View file @
beece207
...
...
@@ -295,9 +295,6 @@ public:
PyErr_Fetch
(
&
type
.
ptr
(),
&
value
.
ptr
(),
&
trace
.
ptr
());
}
error_already_set
(
const
error_already_set
&
)
=
default
;
error_already_set
(
error_already_set
&&
)
=
default
;
inline
~
error_already_set
();
/// Give the currently-held error back to Python, if any. If there is currently a Python error
...
...
dlib/external/pybind11/include/pybind11/stl.h
View file @
beece207
...
...
@@ -30,7 +30,8 @@
# define PYBIND11_HAS_OPTIONAL 1
# endif
// std::experimental::optional (but not allowed in c++11 mode)
# if defined(PYBIND11_CPP14) && __has_include(<experimental/optional>)
# if defined(PYBIND11_CPP14) && (__has_include(<experimental/optional>) && \
!__has_include(<optional>))
# include <experimental/optional>
# define PYBIND11_HAS_EXP_OPTIONAL 1
# endif
...
...
@@ -91,7 +92,7 @@ template <typename Type, typename Key> struct set_caster {
return
s
.
release
();
}
PYBIND11_TYPE_CASTER
(
type
,
_
(
"Set["
)
+
key_conv
::
name
+
_
(
"]"
));
PYBIND11_TYPE_CASTER
(
type
,
_
(
"Set["
)
+
key_conv
::
name
()
+
_
(
"]"
));
};
template
<
typename
Type
,
typename
Key
,
typename
Value
>
struct
map_caster
{
...
...
@@ -127,7 +128,7 @@ template <typename Type, typename Key, typename Value> struct map_caster {
return
d
.
release
();
}
PYBIND11_TYPE_CASTER
(
Type
,
_
(
"Dict["
)
+
key_conv
::
name
+
_
(
", "
)
+
value_conv
::
name
+
_
(
"]"
));
PYBIND11_TYPE_CASTER
(
Type
,
_
(
"Dict["
)
+
key_conv
::
name
()
+
_
(
", "
)
+
value_conv
::
name
()
+
_
(
"]"
));
};
template
<
typename
Type
,
typename
Value
>
struct
list_caster
{
...
...
@@ -168,7 +169,7 @@ public:
return
l
.
release
();
}
PYBIND11_TYPE_CASTER
(
Type
,
_
(
"List["
)
+
value_conv
::
name
+
_
(
"]"
));
PYBIND11_TYPE_CASTER
(
Type
,
_
(
"List["
)
+
value_conv
::
name
()
+
_
(
"]"
));
};
template
<
typename
Type
,
typename
Alloc
>
struct
type_caster
<
std
::
vector
<
Type
,
Alloc
>>
...
...
@@ -222,7 +223,7 @@ public:
return
l
.
release
();
}
PYBIND11_TYPE_CASTER
(
ArrayType
,
_
(
"List["
)
+
value_conv
::
name
+
_
<
Resizable
>
(
_
(
""
),
_
(
"["
)
+
_
<
Size
>
()
+
_
(
"]"
))
+
_
(
"]"
));
PYBIND11_TYPE_CASTER
(
ArrayType
,
_
(
"List["
)
+
value_conv
::
name
()
+
_
<
Resizable
>
(
_
(
""
),
_
(
"["
)
+
_
<
Size
>
()
+
_
(
"]"
))
+
_
(
"]"
));
};
template
<
typename
Type
,
size_t
Size
>
struct
type_caster
<
std
::
array
<
Type
,
Size
>>
...
...
@@ -268,7 +269,7 @@ template<typename T> struct optional_caster {
return
true
;
}
PYBIND11_TYPE_CASTER
(
T
,
_
(
"Optional["
)
+
value_conv
::
name
+
_
(
"]"
));
PYBIND11_TYPE_CASTER
(
T
,
_
(
"Optional["
)
+
value_conv
::
name
()
+
_
(
"]"
));
};
#if PYBIND11_HAS_OPTIONAL
...
...
@@ -348,7 +349,7 @@ struct variant_caster<V<Ts...>> {
}
using
Type
=
V
<
Ts
...
>
;
PYBIND11_TYPE_CASTER
(
Type
,
_
(
"Union["
)
+
detail
::
concat
(
make_caster
<
Ts
>::
name
...)
+
_
(
"]"
));
PYBIND11_TYPE_CASTER
(
Type
,
_
(
"Union["
)
+
detail
::
concat
(
make_caster
<
Ts
>::
name
()
...)
+
_
(
"]"
));
};
#if PYBIND11_HAS_VARIANT
...
...
dlib/external/pybind11/include/pybind11/stl_bind.h
View file @
beece207
...
...
@@ -587,7 +587,7 @@ class_<Map, holder_type> bind_map(handle scope, const std::string &name, Args&&.
auto
it
=
m
.
find
(
k
);
if
(
it
==
m
.
end
())
throw
key_error
();
return
m
.
erase
(
it
);
m
.
erase
(
it
);
}
);
...
...
dlib/external/pybind11/tools/FindPythonLibsNew.cmake
View file @
beece207
# - Find python libraries
# This module finds the libraries corresponding to the Python interpeter
# This module finds the libraries corresponding to the Python interp
r
eter
# FindPythonInterp provides.
# This code sets the following variables:
#
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment