@@ -273,6 +273,7 @@ unique_vstring(PyArrayObject *self, bool equal_nan)
273
273
274
274
npy_intp length = hashset.size ();
275
275
276
+ std::cerr <<" hashset size:" << length << std::endl;
276
277
PyEval_RestoreThread (_save1);
277
278
NPY_ALLOW_C_API;
278
279
// NumPy API calls and Python object manipulations require holding the GIL.
@@ -287,23 +288,30 @@ unique_vstring(PyArrayObject *self, bool equal_nan)
287
288
NPY_ARRAY_WRITEABLE,// flags
288
289
NULL // obj
289
290
);
290
-
291
+ std::cerr << " res_obj: " << ( void *)res_obj << std::endl;
291
292
if (res_obj ==NULL ) {
292
293
return NULL ;
293
294
}
295
+ std::cerr <<" res_obj created successfully." << std::endl;
294
296
PyArray_Descr *res_descr =PyArray_DESCR ((PyArrayObject *)res_obj);
297
+ std::cerr <<" res_descr:" << (void *)res_descr << std::endl;
295
298
// NumPy API calls and Python object manipulations require holding the GIL.
296
299
Py_INCREF (res_descr);
300
+ std::cerr <<" res_descr incremented successfully." << std::endl;
297
301
NPY_DISABLE_C_API;
298
302
PyThreadState *_save2 =PyEval_SaveThread ();
303
+ std::cerr <<" save2:" << (void *)_save2 << std::endl;
299
304
auto save2_dealloc =finally ([&]() {
300
305
PyEval_RestoreThread (_save2);
301
306
});
307
+ std::cerr <<" save2_dealloc completed successfully." << std::endl;
302
308
303
309
npy_string_allocator *out_allocator =NpyString_acquire_allocator ((PyArray_StringDTypeObject *)res_descr);
310
+ std::cerr <<" out_allocator:" << (void *)out_allocator << std::endl;
304
311
auto out_allocator_dealloc =finally ([&]() {
305
312
NpyString_release_allocator (out_allocator);
306
313
});
314
+ std::cerr <<" out_allocator_dealloc completed successfully." << std::endl;
307
315
308
316
char *odata =PyArray_BYTES ((PyArrayObject *)res_obj);
309
317
npy_intp ostride =PyArray_STRIDES ((PyArrayObject *)res_obj)[0 ];