@@ -241,65 +241,39 @@ static int scaleNanosecToUnit(npy_int64 *value, NPY_DATETIMEUNIT unit) {
241
241
static PyObject * get_values (PyObject * obj ) {
242
242
PyObject * values = NULL ;
243
243
244
- values = PyObject_GetAttrString (obj , "values" );
245
244
PRINTMARK ();
246
245
247
- if (values && !PyArray_CheckExact (values )) {
248
-
249
- if (PyObject_HasAttrString (values , "to_numpy" )) {
250
- values = PyObject_CallMethod (values , "to_numpy" , NULL );
251
- }
252
-
253
- if (PyObject_HasAttrString (values , "values" )) {
254
- PyObject * subvals = get_values (values );
255
- PyErr_Clear ();
256
- PRINTMARK ();
257
- // subvals are sometimes missing a dimension
258
- if (subvals ) {
259
- PyArrayObject * reshape = (PyArrayObject * )subvals ;
260
- PyObject * shape = PyObject_GetAttrString (obj , "shape" );
261
- PyArray_Dims dims ;
262
- PRINTMARK ();
263
-
264
- if (!shape || !PyArray_IntpConverter (shape , & dims )) {
265
- subvals = NULL ;
266
- } else {
267
- subvals = PyArray_Newshape (reshape , & dims , NPY_ANYORDER );
268
- PyDimMem_FREE (dims .ptr );
269
- }
270
- Py_DECREF (reshape );
271
- Py_XDECREF (shape );
272
- }
273
- Py_DECREF (values );
274
- values = subvals ;
275
- } else {
276
- PRINTMARK ();
277
- Py_DECREF (values );
278
- values = NULL ;
279
- }
280
- }
281
-
282
- if (!values && PyObject_HasAttrString (obj , "_internal_get_values" )) {
246
+ if (PyObject_HasAttrString (obj , "_internal_get_values" )) {
283
247
PRINTMARK ();
284
248
values = PyObject_CallMethod (obj , "_internal_get_values" , NULL );
285
- if (values && !PyArray_CheckExact (values )) {
249
+
250
+ if (values == NULL ) {
251
+ // Clear so we can subsequently try another method
252
+ PyErr_Clear ();
253
+ } else if (!PyArray_CheckExact (values )) {
254
+ // Didn't get a numpy array, so keep trying
286
255
PRINTMARK ();
287
256
Py_DECREF (values );
288
257
values = NULL ;
289
258
}
290
259
}
291
260
292
- if (! values && PyObject_HasAttrString (obj , "get_block_values" )) {
261
+ if (( values == NULL ) && PyObject_HasAttrString (obj , "get_block_values" )) {
293
262
PRINTMARK ();
294
263
values = PyObject_CallMethod (obj , "get_block_values" , NULL );
295
- if (values && !PyArray_CheckExact (values )) {
264
+
265
+ if (values == NULL ) {
266
+ // Clear so we can subsequently try another method
267
+ PyErr_Clear ();
268
+ } else if (!PyArray_CheckExact (values )) {
269
+ // Didn't get a numpy array, so keep trying
296
270
PRINTMARK ();
297
271
Py_DECREF (values );
298
272
values = NULL ;
299
273
}
300
274
}
301
275
302
- if (! values ) {
276
+ if (values == NULL ) {
303
277
PyObject * typeRepr = PyObject_Repr ((PyObject * )Py_TYPE (obj ));
304
278
PyObject * repr ;
305
279
PRINTMARK ();
@@ -435,8 +409,8 @@ static char *int64ToIso(int64_t value, NPY_DATETIMEUNIT base, size_t *len) {
435
409
}
436
410
437
411
/* JSON callback. returns a char* and mutates the pointer to *len */
438
- static char * NpyDateTimeToIsoCallback (JSOBJ Py_UNUSED (unused ), JSONTypeContext * tc ,
439
- size_t * len ) {
412
+ static char * NpyDateTimeToIsoCallback (JSOBJ Py_UNUSED (unused ),
413
+ JSONTypeContext * tc , size_t * len ) {
440
414
NPY_DATETIMEUNIT base = ((PyObjectEncoder * )tc -> encoder )-> datetimeUnit ;
441
415
return int64ToIso (GET_TC (tc )-> longValue , base , len );
442
416
}
0 commit comments