Skip to content

Commit d80a4b8

Browse files
jbrockmendeljreback
authored andcommitted
move src/datetime.pxd funcs to np_datetime and fix misleading names (#18045)
1 parent 4578a03 commit d80a4b8

File tree

5 files changed

+50
-36
lines changed

5 files changed

+50
-36
lines changed

pandas/_libs/src/datetime.pxd

-22
Original file line numberDiff line numberDiff line change
@@ -136,28 +136,6 @@ cdef inline int _cstring_to_dts(char *val, int length,
136136
return result
137137

138138

139-
cdef inline int64_t _pydatetime_to_dts(object val, pandas_datetimestruct *dts):
140-
dts.year = PyDateTime_GET_YEAR(val)
141-
dts.month = PyDateTime_GET_MONTH(val)
142-
dts.day = PyDateTime_GET_DAY(val)
143-
dts.hour = PyDateTime_DATE_GET_HOUR(val)
144-
dts.min = PyDateTime_DATE_GET_MINUTE(val)
145-
dts.sec = PyDateTime_DATE_GET_SECOND(val)
146-
dts.us = PyDateTime_DATE_GET_MICROSECOND(val)
147-
dts.ps = dts.as = 0
148-
return pandas_datetimestruct_to_datetime(PANDAS_FR_ns, dts)
149-
150-
151-
cdef inline int64_t _date_to_datetime64(object val,
152-
pandas_datetimestruct *dts):
153-
dts.year = PyDateTime_GET_YEAR(val)
154-
dts.month = PyDateTime_GET_MONTH(val)
155-
dts.day = PyDateTime_GET_DAY(val)
156-
dts.hour = dts.min = dts.sec = dts.us = 0
157-
dts.ps = dts.as = 0
158-
return pandas_datetimestruct_to_datetime(PANDAS_FR_ns, dts)
159-
160-
161139
cdef inline bint check_dts_bounds(pandas_datetimestruct *dts):
162140
"""Returns True if an error needs to be raised"""
163141
cdef:

pandas/_libs/tslib.pyx

+11-12
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,6 @@ from datetime cimport (
4646
get_datetime64_unit,
4747
PANDAS_DATETIMEUNIT,
4848
_string_to_dts,
49-
_pydatetime_to_dts,
50-
_date_to_datetime64,
5149
npy_datetime,
5250
is_leapyear,
5351
dayofweek,
@@ -58,7 +56,8 @@ from datetime import time as datetime_time
5856

5957
from tslibs.np_datetime cimport (check_dts_bounds,
6058
pandas_datetimestruct,
61-
dt64_to_dtstruct, dtstruct_to_dt64)
59+
dt64_to_dtstruct, dtstruct_to_dt64,
60+
pydatetime_to_dt64, pydate_to_dt64)
6261
from tslibs.np_datetime import OutOfBoundsDatetime
6362

6463
from khash cimport (
@@ -1674,15 +1673,15 @@ cdef _TSObject convert_datetime_to_tsobject(datetime ts, object tz,
16741673
if (hasattr(tz, 'normalize') and
16751674
hasattr(ts.tzinfo, '_utcoffset')):
16761675
ts = tz.normalize(ts)
1677-
obj.value = _pydatetime_to_dts(ts, &obj.dts)
1676+
obj.value = pydatetime_to_dt64(ts, &obj.dts)
16781677
obj.tzinfo = ts.tzinfo
16791678
else:
16801679
# tzoffset
16811680
try:
16821681
tz = ts.astimezone(tz).tzinfo
16831682
except:
16841683
pass
1685-
obj.value = _pydatetime_to_dts(ts, &obj.dts)
1684+
obj.value = pydatetime_to_dt64(ts, &obj.dts)
16861685
ts_offset = get_utcoffset(ts.tzinfo, ts)
16871686
obj.value -= int(ts_offset.total_seconds() * 1e9)
16881687
tz_offset = get_utcoffset(tz, ts)
@@ -1691,14 +1690,14 @@ cdef _TSObject convert_datetime_to_tsobject(datetime ts, object tz,
16911690
obj.tzinfo = tz
16921691
elif not is_utc(tz):
16931692
ts = _localize_pydatetime(ts, tz)
1694-
obj.value = _pydatetime_to_dts(ts, &obj.dts)
1693+
obj.value = pydatetime_to_dt64(ts, &obj.dts)
16951694
obj.tzinfo = ts.tzinfo
16961695
else:
16971696
# UTC
1698-
obj.value = _pydatetime_to_dts(ts, &obj.dts)
1697+
obj.value = pydatetime_to_dt64(ts, &obj.dts)
16991698
obj.tzinfo = pytz.utc
17001699
else:
1701-
obj.value = _pydatetime_to_dts(ts, &obj.dts)
1700+
obj.value = pydatetime_to_dt64(ts, &obj.dts)
17021701
obj.tzinfo = ts.tzinfo
17031702

17041703
if obj.tzinfo is not None and not is_utc(obj.tzinfo):
@@ -1851,7 +1850,7 @@ def datetime_to_datetime64(ndarray[object] values):
18511850
if inferred_tz is not None:
18521851
raise ValueError('Cannot mix tz-aware with '
18531852
'tz-naive values')
1854-
iresult[i] = _pydatetime_to_dts(val, &dts)
1853+
iresult[i] = pydatetime_to_dt64(val, &dts)
18551854
check_dts_bounds(&dts)
18561855
else:
18571856
raise TypeError('Unrecognized value type: %s' % type(val))
@@ -2176,7 +2175,7 @@ cpdef array_to_datetime(ndarray[object] values, errors='raise',
21762175
'be converted to datetime64 unless '
21772176
'utc=True')
21782177
else:
2179-
iresult[i] = _pydatetime_to_dts(val, &dts)
2178+
iresult[i] = pydatetime_to_dt64(val, &dts)
21802179
if is_timestamp(val):
21812180
iresult[i] += val.nanosecond
21822181
try:
@@ -2188,7 +2187,7 @@ cpdef array_to_datetime(ndarray[object] values, errors='raise',
21882187
raise
21892188

21902189
elif PyDate_Check(val):
2191-
iresult[i] = _date_to_datetime64(val, &dts)
2190+
iresult[i] = pydate_to_dt64(val, &dts)
21922191
try:
21932192
check_dts_bounds(&dts)
21942193
seen_datetime = 1
@@ -2344,7 +2343,7 @@ cpdef array_to_datetime(ndarray[object] values, errors='raise',
23442343
try:
23452344
oresult[i] = parse_datetime_string(val, dayfirst=dayfirst,
23462345
yearfirst=yearfirst)
2347-
_pydatetime_to_dts(oresult[i], &dts)
2346+
pydatetime_to_dt64(oresult[i], &dts)
23482347
check_dts_bounds(&dts)
23492348
except Exception:
23502349
if is_raise:

pandas/_libs/tslibs/np_datetime.pxd

+5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# -*- coding: utf-8 -*-
22
# cython: profile=False
33

4+
from cpython.datetime cimport date, datetime
5+
46
from numpy cimport int64_t, int32_t
57

68

@@ -14,3 +16,6 @@ cdef check_dts_bounds(pandas_datetimestruct *dts)
1416

1517
cdef int64_t dtstruct_to_dt64(pandas_datetimestruct* dts) nogil
1618
cdef void dt64_to_dtstruct(int64_t dt64, pandas_datetimestruct* out) nogil
19+
20+
cdef int64_t pydatetime_to_dt64(datetime val, pandas_datetimestruct *dts)
21+
cdef int64_t pydate_to_dt64(date val, pandas_datetimestruct *dts)

pandas/_libs/tslibs/np_datetime.pyx

+32
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
# -*- coding: utf-8 -*-
22
# cython: profile=False
33

4+
from cpython.datetime cimport (datetime, date,
5+
PyDateTime_IMPORT,
6+
PyDateTime_GET_YEAR, PyDateTime_GET_MONTH,
7+
PyDateTime_GET_DAY, PyDateTime_DATE_GET_HOUR,
8+
PyDateTime_DATE_GET_MINUTE,
9+
PyDateTime_DATE_GET_SECOND,
10+
PyDateTime_DATE_GET_MICROSECOND)
11+
PyDateTime_IMPORT
12+
413
from numpy cimport int64_t
514

615
cdef extern from "numpy/ndarrayobject.h":
@@ -80,3 +89,26 @@ cdef inline void dt64_to_dtstruct(int64_t dt64,
8089
with the by-far-most-common frequency PANDAS_FR_ns"""
8190
pandas_datetime_to_datetimestruct(dt64, PANDAS_FR_ns, out)
8291
return
92+
93+
94+
cdef inline int64_t pydatetime_to_dt64(datetime val,
95+
pandas_datetimestruct *dts):
96+
dts.year = PyDateTime_GET_YEAR(val)
97+
dts.month = PyDateTime_GET_MONTH(val)
98+
dts.day = PyDateTime_GET_DAY(val)
99+
dts.hour = PyDateTime_DATE_GET_HOUR(val)
100+
dts.min = PyDateTime_DATE_GET_MINUTE(val)
101+
dts.sec = PyDateTime_DATE_GET_SECOND(val)
102+
dts.us = PyDateTime_DATE_GET_MICROSECOND(val)
103+
dts.ps = dts.as = 0
104+
return dtstruct_to_dt64(dts)
105+
106+
107+
cdef inline int64_t pydate_to_dt64(date val,
108+
pandas_datetimestruct *dts):
109+
dts.year = PyDateTime_GET_YEAR(val)
110+
dts.month = PyDateTime_GET_MONTH(val)
111+
dts.day = PyDateTime_GET_DAY(val)
112+
dts.hour = dts.min = dts.sec = dts.us = 0
113+
dts.ps = dts.as = 0
114+
return dtstruct_to_dt64(dts)

pandas/_libs/tslibs/offsets.pyx

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ np.import_array()
1313

1414
from util cimport is_string_object
1515

16-
17-
from pandas._libs.tslib import pydt_to_i8, tz_convert_single
16+
from conversion cimport tz_convert_single
17+
from pandas._libs.tslib import pydt_to_i8
1818

1919
# ---------------------------------------------------------------------
2020
# Constants

0 commit comments

Comments
 (0)