@@ -68,6 +68,21 @@ template<typename... Ix> arr_t& mutate_at_t(arr_t& a, Ix... idx) { a.mutable_at(
68
68
sm.def(#name, [](type a, int i, int j) { return name (a, i, j); }); \
69
69
sm.def(#name, [](type a, int i, int j, int k) { return name (a, i, j, k); });
70
70
71
+ template <typename T, typename T2> py::handle auxiliaries (T &&r, T2 &&r2) {
72
+ if (r.ndim () != 2 ) throw std::domain_error (" error: ndim != 2" );
73
+ py::list l;
74
+ l.append (*r.data (0 , 0 ));
75
+ l.append (*r2.mutable_data (0 , 0 ));
76
+ l.append (r.data (0 , 1 ) == r2.mutable_data (0 , 1 ));
77
+ l.append (r.ndim ());
78
+ l.append (r.itemsize ());
79
+ l.append (r.shape (0 ));
80
+ l.append (r.shape (1 ));
81
+ l.append (r.size ());
82
+ l.append (r.nbytes ());
83
+ return l.release ();
84
+ }
85
+
71
86
test_initializer numpy_array ([](py::module &m) {
72
87
auto sm = m.def_submodule (" array" );
73
88
@@ -221,17 +236,7 @@ test_initializer numpy_array([](py::module &m) {
221
236
sm.def (" proxy_auxiliaries2" , [](py::array_t <double > a) {
222
237
auto r = a.unchecked <2 >();
223
238
auto r2 = a.mutable_unchecked <2 >();
224
- py::list l;
225
- l.append (*r.data (0 , 0 ));
226
- l.append (*r2.mutable_data (0 , 0 ));
227
- l.append (r.data (0 , 1 ) == r2.mutable_data (0 , 1 ));
228
- l.append (r.ndim ());
229
- l.append (r.itemsize ());
230
- l.append (r.shape (0 ));
231
- l.append (r.shape (1 ));
232
- l.append (r.size ());
233
- l.append (r.nbytes ());
234
- return l.release ();
239
+ return auxiliaries (r, r2);
235
240
});
236
241
237
242
// Same as the above, but without a compile-time dimensions specification:
@@ -253,19 +258,10 @@ test_initializer numpy_array([](py::module &m) {
253
258
return a;
254
259
});
255
260
sm.def (" proxy_auxiliaries2_dyn" , [](py::array_t <double > a) {
256
- auto r = a.unchecked ();
257
- if (r.ndim () != 2 ) throw std::domain_error (" error: ndim != 2" );
258
- auto r2 = a.mutable_unchecked ();
259
- py::list l;
260
- l.append (*r.data (0 , 0 ));
261
- l.append (*r2.mutable_data (0 , 0 ));
262
- l.append (r.data (0 , 1 ) == r2.mutable_data (0 , 1 ));
263
- l.append (r.ndim ());
264
- l.append (r.itemsize ());
265
- l.append (r.shape (0 ));
266
- l.append (r.shape (1 ));
267
- l.append (r.size ());
268
- l.append (r.nbytes ());
269
- return l.release ();
261
+ return auxiliaries (a.unchecked (), a.mutable_unchecked ());
262
+ });
263
+
264
+ sm.def (" array_auxiliaries2" , [](py::array_t <double > a) {
265
+ return auxiliaries (a, a);
270
266
});
271
267
});
0 commit comments