@@ -69,16 +69,28 @@ namespace {
69
69
static void bind_type_array (
70
70
py::module & mod,
71
71
std::string const & suffix) {
72
- using dash_array_t = dash::Array<T>;
73
- using pydash_array_t = py::class_<
74
- dash_array_t ,
75
- std::shared_ptr<dash_array_t > >;
76
- using iterator_t = typename dash_array_t ::iterator;
72
+ using dash_array_t = dash::Array<T>;
73
+ using dash_larray_t = typename dash_array_t ::local_type;
74
+
75
+ using pydash_array_t = py::class_<
76
+ dash_array_t ,
77
+ std::shared_ptr<dash_array_t > >;
78
+
79
+ using pydash_larray_t = py::class_<
80
+ dash_larray_t ,
81
+ std::shared_ptr<dash_larray_t > >;
82
+
83
+ using iterator_t = typename dash_array_t ::iterator;
84
+ using literator_t = typename dash_larray_t ::iterator;
77
85
78
86
typedef typename dash_array_t ::index_type index_t ;
79
87
typedef typename dash_array_t ::size_type extent_t ;
80
88
typedef typename dash_array_t ::pattern_type pattern_t ;
81
89
90
+ // ===================================================================
91
+ // dash::Array
92
+ // -------------------------------------------------------------------
93
+
82
94
pydash_array_t py_array (mod, (" Array" + suffix).c_str ());
83
95
84
96
py_array.def (py::init<int >());
@@ -169,6 +181,81 @@ namespace {
169
181
: dash::distance (arr.begin (), it_min);
170
182
}
171
183
);
184
+
185
+ // ===================================================================
186
+ // dash::Array::local_type
187
+ // -------------------------------------------------------------------
188
+
189
+ pydash_larray_t py_larray (mod, (" LArray" + suffix).c_str ());
190
+
191
+ // py_larray.def(py::init<int>());
192
+
193
+ // Usage:
194
+ // larray[<local index>] = <new value>
195
+ py_larray.def (" __setitem__" ,
196
+ [](dash_larray_t & larr, index_t lidx, const T & val) {
197
+ if (lidx >= larr.size ()) {
198
+ throw std::out_of_range (" pydash.Array.local: index out of bounds" );
199
+ }
200
+ larr[lidx] = val;
201
+ }
202
+ );
203
+
204
+ // Usage:
205
+ // val = larray[<local index>]
206
+ py_larray.def (" __getitem__" ,
207
+ [](dash_larray_t & larr, index_t lidx) -> T {
208
+ if (lidx >= larr.size ()) {
209
+ throw std::out_of_range (" pydash.Array.local: index out of bounds" );
210
+ }
211
+ return larr[lidx];
212
+ },
213
+ // ref + keepalive
214
+ py::return_value_policy::reference_internal
215
+ );
216
+
217
+ py_larray.def (" __iter__" ,
218
+ [](dash_larray_t & larr) {
219
+ return py::make_iterator<
220
+ py::return_value_policy::reference_internal,
221
+ literator_t , literator_t , T &
222
+ >(larr.begin (), larr.end ());
223
+ },
224
+ // Essential: keep list alive while iterator exists
225
+ py::keep_alive<0 , 1 >()
226
+ );
227
+
228
+ // Usage:
229
+ // larray.size() -> int
230
+ py_larray.def (" size" ,
231
+ (index_t (dash_larray_t ::*)(void ))
232
+ (&dash_larray_t ::size)
233
+ );
234
+
235
+ // Usage:
236
+ // larray.set(<local index>, <new value>)
237
+ py_larray.def (" set" ,
238
+ [](dash_larray_t & larr, long idx, const T & val) {
239
+ larr[idx] = val;
240
+ }
241
+ );
242
+ // Usage:
243
+ // larray.get(<local index>) -> T
244
+ py_larray.def (" get" ,
245
+ [](dash_larray_t & larr, long idx) {
246
+ return static_cast <T>(larr[idx]);
247
+ }
248
+ );
249
+
250
+ // ===================================================================
251
+ // dash::Array.local
252
+ // -------------------------------------------------------------------
253
+
254
+ // Usage:
255
+ // array.local -> LArray
256
+ py_array.def_readwrite (" local" ,
257
+ (&dash_array_t ::local)
258
+ );
172
259
}
173
260
174
261
}
@@ -203,9 +290,9 @@ PYBIND11_PLUGIN(pydash) {
203
290
(bool (*)(void )) &(dash::is_initialized),
204
291
" Check whether DASH has been initialized." );
205
292
206
- m.def (" is_multithreaded" ,
207
- (bool (*)(void )) &(dash::is_multithreaded),
208
- " Check whether DASH supports multi-threaded access." );
293
+ // m.def("is_multithreaded",
294
+ // (bool (*)(void)) &(dash::is_multithreaded),
295
+ // "Check whether DASH supports multi-threaded access.");
209
296
210
297
m.def (" myid" ,
211
298
&(dash::myid),
0 commit comments