Skip to content

Commit fa3662c

Browse files
authored
REF: implement ABCTimestamp, ABCTimedelta, ABCTick (pandas-dev#34054)
1 parent e9b019b commit fa3662c

16 files changed

+520
-485
lines changed

pandas/_libs/index.pyx

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ cimport pandas._libs.util as util
2323

2424
from pandas._libs.tslibs import Period, Timedelta
2525
from pandas._libs.tslibs.nattype cimport c_NaT as NaT
26-
from pandas._libs.tslibs.c_timestamp cimport _Timestamp
26+
from pandas._libs.tslibs.base cimport ABCTimestamp
2727

2828
from pandas._libs.hashtable cimport HashTable
2929

@@ -378,7 +378,7 @@ cdef class DatetimeEngine(Int64Engine):
378378
cdef int64_t _unbox_scalar(self, scalar) except? -1:
379379
# NB: caller is responsible for ensuring tzawareness compat
380380
# before we get here
381-
if not (isinstance(scalar, _Timestamp) or scalar is NaT):
381+
if not (isinstance(scalar, ABCTimestamp) or scalar is NaT):
382382
raise TypeError(scalar)
383383
return scalar.value
384384

pandas/_libs/tslib.pyx

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ from pandas._libs.util cimport (
2626
is_integer_object,
2727
)
2828

29-
from pandas._libs.tslibs.c_timestamp cimport _Timestamp
29+
from pandas._libs.tslibs.base cimport ABCTimestamp
3030

3131
from pandas._libs.tslibs.np_datetime cimport (
3232
_string_to_dts,
@@ -617,7 +617,7 @@ cpdef array_to_datetime(
617617
'datetime64 unless utc=True')
618618
else:
619619
iresult[i] = pydatetime_to_dt64(val, &dts)
620-
if isinstance(val, _Timestamp):
620+
if isinstance(val, ABCTimestamp):
621621
iresult[i] += val.nanosecond
622622
check_dts_bounds(&dts)
623623

pandas/_libs/tslibs/__init__.py

+1-4
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,5 @@
2121
from .np_datetime import OutOfBoundsDatetime
2222
from .period import IncompatibleFrequency, Period
2323
from .timedeltas import Timedelta, delta_to_nanoseconds, ints_to_pytimedelta
24-
from .timestamps import Timestamp
24+
from .timestamps import NullFrequencyError, Timestamp
2525
from .tzconversion import tz_convert_single
26-
27-
# import fails if we do this before np_datetime
28-
from .c_timestamp import NullFrequencyError # isort:skip

pandas/_libs/tslibs/base.pxd

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from cpython.datetime cimport datetime, timedelta
2+
3+
cdef class ABCTimedelta(timedelta):
4+
pass
5+
6+
7+
cdef class ABCTimestamp(datetime):
8+
pass
9+
10+
11+
cdef class ABCTick:
12+
pass
13+
14+
15+
cdef class ABCPeriod:
16+
pass
17+
18+
19+
cdef bint is_tick_object(object obj)
20+
cdef bint is_period_object(object obj)

pandas/_libs/tslibs/base.pyx

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
"""
2+
We define base classes that will be inherited by Timestamp, Timedelta, etc
3+
in order to allow for fast isinstance checks without circular dependency issues.
4+
5+
This is analogous to core.dtypes.generic.
6+
"""
7+
8+
from cpython.datetime cimport datetime, timedelta
9+
10+
11+
cdef class ABCTimedelta(timedelta):
12+
pass
13+
14+
15+
cdef class ABCTimestamp(datetime):
16+
pass
17+
18+
19+
cdef class ABCPeriod:
20+
pass
21+
22+
23+
cdef class ABCTick:
24+
pass
25+
26+
27+
cdef bint is_tick_object(object obj):
28+
return isinstance(obj, ABCTick)
29+
30+
31+
cdef bint is_period_object(object obj):
32+
return isinstance(obj, ABCPeriod)

pandas/_libs/tslibs/c_timestamp.pxd

-17
This file was deleted.

0 commit comments

Comments
 (0)