@@ -34,11 +34,6 @@ cdef extern from "src/datetime/np_datetime.h":
3434 int cmp_npy_datetimestruct(npy_datetimestruct * a,
3535 npy_datetimestruct * b)
3636
37- void pandas_timedelta_to_timedeltastruct(npy_timedelta val,
38- NPY_DATETIMEUNIT fr,
39- pandas_timedeltastruct * result
40- ) nogil
41-
4237 # AS, FS, PS versions exist but are not imported because they are not used.
4338 npy_datetimestruct _NS_MIN_DTS, _NS_MAX_DTS
4439 npy_datetimestruct _US_MIN_DTS, _US_MAX_DTS
@@ -100,6 +95,28 @@ def py_get_unit_from_dtype(dtype):
10095# Comparison
10196
10297
98+ cdef bint cmp_dtstructs(
99+ npy_datetimestruct* left, npy_datetimestruct* right, int op
100+ ):
101+ cdef:
102+ int cmp_res
103+
104+ cmp_res = cmp_npy_datetimestruct(left, right)
105+ if op == Py_EQ:
106+ return cmp_res == 0
107+ if op == Py_NE:
108+ return cmp_res != 0
109+ if op == Py_GT:
110+ return cmp_res == 1
111+ if op == Py_LT:
112+ return cmp_res == - 1
113+ if op == Py_GE:
114+ return cmp_res == 1 or cmp_res == 0
115+ else :
116+ # i.e. op == Py_LE
117+ return cmp_res == - 1 or cmp_res == 0
118+
119+
103120cdef inline bint cmp_scalar(int64_t lhs, int64_t rhs, int op) except - 1 :
104121 """
105122 cmp_scalar is a more performant version of PyObject_RichCompare
@@ -127,6 +144,15 @@ class OutOfBoundsDatetime(ValueError):
127144 pass
128145
129146
147+ class OutOfBoundsTimedelta (ValueError ):
148+ """
149+ Raised when encountering a timedelta value that cannot be represented
150+ as a timedelta64[ns].
151+ """
152+ # Timedelta analogue to OutOfBoundsDatetime
153+ pass
154+
155+
130156cdef check_dts_bounds(npy_datetimestruct * dts, NPY_DATETIMEUNIT unit = NPY_FR_ns):
131157 """ Raises OutOfBoundsDatetime if the given date is outside the range that
132158 can be represented by nanosecond-resolution 64-bit integers."""
0 commit comments