From d36ef84113519874459daa4b3218ca06057fe148 Mon Sep 17 00:00:00 2001 From: arw2019 Date: Fri, 25 Sep 2020 03:29:31 +0000 Subject: [PATCH 1/7] implement is_real_number_object --- pandas/_libs/tslibs/util.pxd | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pandas/_libs/tslibs/util.pxd b/pandas/_libs/tslibs/util.pxd index e280609bb17a7..9da3fc0e154ea 100644 --- a/pandas/_libs/tslibs/util.pxd +++ b/pandas/_libs/tslibs/util.pxd @@ -121,6 +121,9 @@ cdef inline bint is_bool_object(object obj) nogil: PyObject_TypeCheck(obj, &PyBoolArrType_Type)) +cdef inline bint is_real_number_object(object obj) nogil: + return is_bool_object(obj) or is_integer_object(obj) or is_float_object(obj) + cdef inline bint is_timedelta64_object(object obj) nogil: """ Cython equivalent of `isinstance(val, np.timedelta64)` From 1228b6e322ae3d181f508c56b8befa2bb9dec701 Mon Sep 17 00:00:00 2001 From: arw2019 Date: Fri, 25 Sep 2020 03:31:30 +0000 Subject: [PATCH 2/7] use is_real_number_object in testing.pyx --- pandas/_libs/testing.pyx | 26 +++++--------------------- 1 file changed, 5 insertions(+), 21 deletions(-) diff --git a/pandas/_libs/testing.pyx b/pandas/_libs/testing.pyx index 64fc8d615ea9c..208b2524e8d4d 100644 --- a/pandas/_libs/testing.pyx +++ b/pandas/_libs/testing.pyx @@ -6,33 +6,17 @@ from numpy cimport import_array import_array() -from pandas._libs.util cimport is_array +from pandas._libs.util cimport ( + is_array, + is_real_number_object +) from pandas.core.dtypes.common import is_dtype_equal from pandas.core.dtypes.missing import array_equivalent, isna -cdef NUMERIC_TYPES = ( - bool, - int, - float, - np.bool_, - np.int8, - np.int16, - np.int32, - np.int64, - np.uint8, - np.uint16, - np.uint32, - np.uint64, - np.float16, - np.float32, - np.float64, -) - - cdef bint is_comparable_as_number(obj): - return isinstance(obj, NUMERIC_TYPES) + return is_real_number_object(obj) cdef bint isiterable(obj): From b8549168e3d12a60e2370b5a32ca0d83b1e37763 Mon Sep 17 00:00:00 2001 From: arw2019 Date: Fri, 25 Sep 2020 03:34:32 +0000 Subject: [PATCH 3/7] rename is_comparable_as_number -> is_comparable_as_real_number --- pandas/_libs/testing.pyx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pandas/_libs/testing.pyx b/pandas/_libs/testing.pyx index 208b2524e8d4d..359c51405b1a2 100644 --- a/pandas/_libs/testing.pyx +++ b/pandas/_libs/testing.pyx @@ -15,7 +15,7 @@ from pandas.core.dtypes.common import is_dtype_equal from pandas.core.dtypes.missing import array_equivalent, isna -cdef bint is_comparable_as_number(obj): +cdef bint is_comparable_as_real_number(obj): return is_real_number_object(obj) @@ -182,7 +182,7 @@ cpdef assert_almost_equal(a, b, # object comparison return True - if is_comparable_as_number(a) and is_comparable_as_number(b): + if is_comparable_as_real_number(a) and is_comparable_as_real_number(b): if array_equivalent(a, b, strict_nan=True): # inf comparison return True From 88e165dca5b6a0a9595e5dbbfeade9c44f2e0893 Mon Sep 17 00:00:00 2001 From: arw2019 Date: Fri, 25 Sep 2020 05:30:26 +0000 Subject: [PATCH 4/7] linting --- pandas/_libs/testing.pyx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/_libs/testing.pyx b/pandas/_libs/testing.pyx index 359c51405b1a2..01c3e9fdf3f6b 100644 --- a/pandas/_libs/testing.pyx +++ b/pandas/_libs/testing.pyx @@ -8,7 +8,7 @@ import_array() from pandas._libs.util cimport ( is_array, - is_real_number_object + is_real_number_object, ) from pandas.core.dtypes.common import is_dtype_equal From 855c91e0d5327436d87b51c2888a454c87aa2257 Mon Sep 17 00:00:00 2001 From: arw2019 Date: Fri, 25 Sep 2020 17:52:41 +0000 Subject: [PATCH 5/7] feedback: add missing newline --- pandas/_libs/tslibs/util.pxd | 1 + 1 file changed, 1 insertion(+) diff --git a/pandas/_libs/tslibs/util.pxd b/pandas/_libs/tslibs/util.pxd index 9da3fc0e154ea..1f79a1ea7b6d1 100644 --- a/pandas/_libs/tslibs/util.pxd +++ b/pandas/_libs/tslibs/util.pxd @@ -124,6 +124,7 @@ cdef inline bint is_bool_object(object obj) nogil: cdef inline bint is_real_number_object(object obj) nogil: return is_bool_object(obj) or is_integer_object(obj) or is_float_object(obj) + cdef inline bint is_timedelta64_object(object obj) nogil: """ Cython equivalent of `isinstance(val, np.timedelta64)` From 19016fa27611f16cb43210bbd1e0cdd526cefaea Mon Sep 17 00:00:00 2001 From: arw2019 Date: Sat, 26 Sep 2020 02:06:42 +0000 Subject: [PATCH 6/7] fix imports --- pandas/_libs/testing.pyx | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/pandas/_libs/testing.pyx b/pandas/_libs/testing.pyx index 01c3e9fdf3f6b..002dd4e5b2b2a 100644 --- a/pandas/_libs/testing.pyx +++ b/pandas/_libs/testing.pyx @@ -6,10 +6,7 @@ from numpy cimport import_array import_array() -from pandas._libs.util cimport ( - is_array, - is_real_number_object, -) +from pandas._libs.util cimport is_array, is_real_number_object from pandas.core.dtypes.common import is_dtype_equal from pandas.core.dtypes.missing import array_equivalent, isna From aaef028b63ac1be7b4c6ff0070406534d926adce Mon Sep 17 00:00:00 2001 From: arw2019 Date: Sat, 26 Sep 2020 02:11:10 +0000 Subject: [PATCH 7/7] feedback: use imported func directly --- pandas/_libs/testing.pyx | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/pandas/_libs/testing.pyx b/pandas/_libs/testing.pyx index 002dd4e5b2b2a..aae19f644af66 100644 --- a/pandas/_libs/testing.pyx +++ b/pandas/_libs/testing.pyx @@ -12,10 +12,6 @@ from pandas.core.dtypes.common import is_dtype_equal from pandas.core.dtypes.missing import array_equivalent, isna -cdef bint is_comparable_as_real_number(obj): - return is_real_number_object(obj) - - cdef bint isiterable(obj): return hasattr(obj, '__iter__') @@ -179,7 +175,7 @@ cpdef assert_almost_equal(a, b, # object comparison return True - if is_comparable_as_real_number(a) and is_comparable_as_real_number(b): + if is_real_number_object(a) and is_real_number_object(b): if array_equivalent(a, b, strict_nan=True): # inf comparison return True