@@ -390,6 +390,25 @@ quadprec_fromstr(char *s, void *dptr, char **endptr, PyArray_Descr *descr_generi
390390 return 0 ;
391391}
392392
393+ static npy_bool
394+ quadprec_nonzero (void * data , void * arr )
395+ {
396+ PyArrayObject * arr_obj = (PyArrayObject * )arr ;
397+ QuadPrecDTypeObject * descr = (QuadPrecDTypeObject * )PyArray_DESCR (arr_obj );
398+ QuadBackendType backend = descr -> backend ;
399+
400+ if (backend == BACKEND_SLEEF ) {
401+ Sleef_quad val ;
402+ memcpy (& val , data , sizeof (Sleef_quad ));
403+ return !Sleef_icmpeqq1 (val , QUAD_PRECISION_ZERO );
404+ }
405+ else {
406+ long double val ;
407+ memcpy (& val , data , sizeof (long double ));
408+ return val != 0.0L ;
409+ }
410+ }
411+
393412/*
394413 * Compare function for sorting operations (argsort, sort, etc.)
395414 * Implements PyArray_CompareFunc.
@@ -632,6 +651,7 @@ static PyType_Slot QuadPrecDType_Slots[] = {
632651 {NPY_DT_getitem , & quadprec_getitem },
633652 {NPY_DT_default_descr , & quadprec_default_descr },
634653 {NPY_DT_get_constant , & quadprec_get_constant },
654+ {NPY_DT_PyArray_ArrFuncs_nonzero , & quadprec_nonzero },
635655 {NPY_DT_PyArray_ArrFuncs_compare , & quadprec_compare },
636656 {NPY_DT_PyArray_ArrFuncs_argmax , & quadprec_argmax },
637657 {NPY_DT_PyArray_ArrFuncs_argmin , & quadprec_argmin },
0 commit comments