10#include <pybind11/numpy.h>
11#include <pybind11/stl_bind.h>
17#include <unordered_map>
22 explicit El(
int v) :
a(v) {}
28 s <<
"El{" << v.
a <<
'}';
44template <
class Container>
46 auto *v =
new Container();
47 for (
int i = 1; i <= n; i++) {
56 for (
int i = 1; i <= n; i++) {
57 m->emplace(
int(i),
E_nc(10 * i));
62template <
class NestMap>
64 auto *m =
new NestMap();
65 for (
int i = 1; i <= n; i++) {
66 for (
int j = 1; j <= n; j++) {
67 (*m)[i].emplace(
int(j * 10),
E_nc(100 * j));
75 py::bind_vector<std::vector<unsigned int>>(m,
"VectorInt", py::buffer_protocol());
78 py::class_<El>(m,
"El").def(py::init<int>());
79 py::bind_vector<std::vector<El>>(m,
"VectorEl");
80 py::bind_vector<std::vector<std::vector<El>>>(m,
"VectorVectorEl");
83 py::bind_map<std::map<std::string, double>>(m,
"MapStringDouble");
84 py::bind_map<std::unordered_map<std::string, double>>(m,
"UnorderedMapStringDouble");
87 py::bind_map<std::map<std::string, double const>>(m,
"MapStringDoubleConst");
88 py::bind_map<std::unordered_map<std::string, double const>>(m,
89 "UnorderedMapStringDoubleConst");
91 py::class_<E_nc>(m,
"ENC").def(py::init<int>()).def_readwrite(
"value", &
E_nc::value);
94 py::bind_vector<std::vector<E_nc>>(m,
"VectorENC");
95 m.def(
"get_vnc", &
one_to_n<std::vector<E_nc>>);
96 py::bind_vector<std::deque<E_nc>>(m,
"DequeENC");
97 m.def(
"get_dnc", &
one_to_n<std::deque<E_nc>>);
98 py::bind_map<std::map<int, E_nc>>(m,
"MapENC");
99 m.def(
"get_mnc", &
times_ten<std::map<int, E_nc>>);
100 py::bind_map<std::unordered_map<int, E_nc>>(m,
"UmapENC");
101 m.def(
"get_umnc", &
times_ten<std::unordered_map<int, E_nc>>);
103 py::bind_map<std::map<int, std::vector<E_nc>>>(m,
"MapVecENC");
104 m.def(
"get_nvnc", [](
int n) {
105 auto *m =
new std::map<int, std::vector<E_nc>>();
106 for (
int i = 1; i <= n; i++) {
107 for (
int j = 1; j <= n; j++) {
108 (*m)[i].emplace_back(j);
113 py::bind_map<std::map<int, std::map<int, E_nc>>>(m,
"MapMapENC");
114 m.def(
"get_nmnc", &
times_hundred<std::map<
int, std::map<int, E_nc>>>);
115 py::bind_map<std::unordered_map<int, std::unordered_map<int, E_nc>>>(m,
"UmapUmapENC");
116 m.def(
"get_numnc", &
times_hundred<std::unordered_map<
int, std::unordered_map<int, E_nc>>>);
119 py::bind_vector<std::vector<unsigned char>>(m,
"VectorUChar", py::buffer_protocol());
121 struct VUndeclStruct {
127 m.def(
"create_undeclstruct", [m]()
mutable {
128 py::bind_vector<std::vector<VUndeclStruct>>(
129 m,
"VectorUndeclStruct", py::buffer_protocol());
134 py::module_::import(
"numpy");
147 py::class_<VStruct>(m,
"VStruct").def_readwrite(
"x", &VStruct::x);
148 py::bind_vector<std::vector<VStruct>>(m,
"VectorStruct", py::buffer_protocol());
149 m.def(
"get_vectorstruct", [] {
150 return std::vector<VStruct>{{
false, 5, 3.0,
true}, {
true, 30, -1e4,
false}};
Issue #487: binding std::vector<E> with E non-copyable.
E_nc(const E_nc &)=delete
E_nc & operator=(const E_nc &)=delete
E_nc & operator=(E_nc &&)=default
#define PYBIND11_NUMPY_DTYPE(Type,...)
#define TEST_SUBMODULE(name, variable)
NestMap * times_hundred(int n)
Container * one_to_n(int n)
std::ostream & operator<<(std::ostream &s, El const &v)