Skip to content

move src/datetime.pxd funcs to np_datetime and fix misleading names #18045

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Oct 31, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 0 additions & 22 deletions pandas/_libs/src/datetime.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -136,28 +136,6 @@ cdef inline int _cstring_to_dts(char *val, int length,
return result


cdef inline int64_t _pydatetime_to_dts(object val, pandas_datetimestruct *dts):
dts.year = PyDateTime_GET_YEAR(val)
dts.month = PyDateTime_GET_MONTH(val)
dts.day = PyDateTime_GET_DAY(val)
dts.hour = PyDateTime_DATE_GET_HOUR(val)
dts.min = PyDateTime_DATE_GET_MINUTE(val)
dts.sec = PyDateTime_DATE_GET_SECOND(val)
dts.us = PyDateTime_DATE_GET_MICROSECOND(val)
dts.ps = dts.as = 0
return pandas_datetimestruct_to_datetime(PANDAS_FR_ns, dts)


cdef inline int64_t _date_to_datetime64(object val,
pandas_datetimestruct *dts):
dts.year = PyDateTime_GET_YEAR(val)
dts.month = PyDateTime_GET_MONTH(val)
dts.day = PyDateTime_GET_DAY(val)
dts.hour = dts.min = dts.sec = dts.us = 0
dts.ps = dts.as = 0
return pandas_datetimestruct_to_datetime(PANDAS_FR_ns, dts)


cdef inline bint check_dts_bounds(pandas_datetimestruct *dts):
"""Returns True if an error needs to be raised"""
cdef:
Expand Down
23 changes: 11 additions & 12 deletions pandas/_libs/tslib.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,6 @@ from datetime cimport (
get_datetime64_unit,
PANDAS_DATETIMEUNIT,
_string_to_dts,
_pydatetime_to_dts,
_date_to_datetime64,
npy_datetime,
is_leapyear,
dayofweek,
Expand All @@ -57,7 +55,8 @@ from datetime import time as datetime_time

from tslibs.np_datetime cimport (check_dts_bounds,
pandas_datetimestruct,
dt64_to_dtstruct, dtstruct_to_dt64)
dt64_to_dtstruct, dtstruct_to_dt64,
pydatetime_to_dt64, pydate_to_dt64)
from tslibs.np_datetime import OutOfBoundsDatetime

from khash cimport (
Expand Down Expand Up @@ -1680,15 +1679,15 @@ cdef _TSObject convert_datetime_to_tsobject(datetime ts, object tz,
if (hasattr(tz, 'normalize') and
hasattr(ts.tzinfo, '_utcoffset')):
ts = tz.normalize(ts)
obj.value = _pydatetime_to_dts(ts, &obj.dts)
obj.value = pydatetime_to_dt64(ts, &obj.dts)
obj.tzinfo = ts.tzinfo
else:
# tzoffset
try:
tz = ts.astimezone(tz).tzinfo
except:
pass
obj.value = _pydatetime_to_dts(ts, &obj.dts)
obj.value = pydatetime_to_dt64(ts, &obj.dts)
ts_offset = get_utcoffset(ts.tzinfo, ts)
obj.value -= int(ts_offset.total_seconds() * 1e9)
tz_offset = get_utcoffset(tz, ts)
Expand All @@ -1698,14 +1697,14 @@ cdef _TSObject convert_datetime_to_tsobject(datetime ts, object tz,
obj.tzinfo = tz
elif not is_utc(tz):
ts = _localize_pydatetime(ts, tz)
obj.value = _pydatetime_to_dts(ts, &obj.dts)
obj.value = pydatetime_to_dt64(ts, &obj.dts)
obj.tzinfo = ts.tzinfo
else:
# UTC
obj.value = _pydatetime_to_dts(ts, &obj.dts)
obj.value = pydatetime_to_dt64(ts, &obj.dts)
obj.tzinfo = pytz.utc
else:
obj.value = _pydatetime_to_dts(ts, &obj.dts)
obj.value = pydatetime_to_dt64(ts, &obj.dts)
obj.tzinfo = ts.tzinfo

if obj.tzinfo is not None and not is_utc(obj.tzinfo):
Expand Down Expand Up @@ -1859,7 +1858,7 @@ def datetime_to_datetime64(ndarray[object] values):
if inferred_tz is not None:
raise ValueError('Cannot mix tz-aware with '
'tz-naive values')
iresult[i] = _pydatetime_to_dts(val, &dts)
iresult[i] = pydatetime_to_dt64(val, &dts)
check_dts_bounds(&dts)
else:
raise TypeError('Unrecognized value type: %s' % type(val))
Expand Down Expand Up @@ -2184,7 +2183,7 @@ cpdef array_to_datetime(ndarray[object] values, errors='raise',
'be converted to datetime64 unless '
'utc=True')
else:
iresult[i] = _pydatetime_to_dts(val, &dts)
iresult[i] = pydatetime_to_dt64(val, &dts)
if is_timestamp(val):
iresult[i] += val.nanosecond
try:
Expand All @@ -2196,7 +2195,7 @@ cpdef array_to_datetime(ndarray[object] values, errors='raise',
raise

elif PyDate_Check(val):
iresult[i] = _date_to_datetime64(val, &dts)
iresult[i] = pydate_to_dt64(val, &dts)
try:
check_dts_bounds(&dts)
seen_datetime = 1
Expand Down Expand Up @@ -2353,7 +2352,7 @@ cpdef array_to_datetime(ndarray[object] values, errors='raise',
try:
oresult[i] = parse_datetime_string(val, dayfirst=dayfirst,
yearfirst=yearfirst)
_pydatetime_to_dts(oresult[i], &dts)
pydatetime_to_dt64(oresult[i], &dts)
check_dts_bounds(&dts)
except Exception:
if is_raise:
Expand Down
5 changes: 5 additions & 0 deletions pandas/_libs/tslibs/np_datetime.pxd
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# -*- coding: utf-8 -*-
# cython: profile=False

from cpython.datetime cimport date, datetime

from numpy cimport int64_t, int32_t


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

cdef int64_t dtstruct_to_dt64(pandas_datetimestruct* dts) nogil
cdef void dt64_to_dtstruct(int64_t dt64, pandas_datetimestruct* out) nogil

cdef int64_t pydatetime_to_dt64(datetime val, pandas_datetimestruct *dts)
cdef int64_t pydate_to_dt64(date val, pandas_datetimestruct *dts)
32 changes: 32 additions & 0 deletions pandas/_libs/tslibs/np_datetime.pyx
Original file line number Diff line number Diff line change
@@ -1,6 +1,15 @@
# -*- coding: utf-8 -*-
# cython: profile=False

from cpython.datetime cimport (datetime, date,
PyDateTime_IMPORT,
PyDateTime_GET_YEAR, PyDateTime_GET_MONTH,
PyDateTime_GET_DAY, PyDateTime_DATE_GET_HOUR,
PyDateTime_DATE_GET_MINUTE,
PyDateTime_DATE_GET_SECOND,
PyDateTime_DATE_GET_MICROSECOND)
PyDateTime_IMPORT

from numpy cimport int64_t

cdef extern from "numpy/ndarrayobject.h":
Expand Down Expand Up @@ -80,3 +89,26 @@ cdef inline void dt64_to_dtstruct(int64_t dt64,
with the by-far-most-common frequency PANDAS_FR_ns"""
pandas_datetime_to_datetimestruct(dt64, PANDAS_FR_ns, out)
return


cdef inline int64_t pydatetime_to_dt64(datetime val,
pandas_datetimestruct *dts):
dts.year = PyDateTime_GET_YEAR(val)
dts.month = PyDateTime_GET_MONTH(val)
dts.day = PyDateTime_GET_DAY(val)
dts.hour = PyDateTime_DATE_GET_HOUR(val)
dts.min = PyDateTime_DATE_GET_MINUTE(val)
dts.sec = PyDateTime_DATE_GET_SECOND(val)
dts.us = PyDateTime_DATE_GET_MICROSECOND(val)
dts.ps = dts.as = 0
return dtstruct_to_dt64(dts)


cdef inline int64_t pydate_to_dt64(date val,
pandas_datetimestruct *dts):
dts.year = PyDateTime_GET_YEAR(val)
dts.month = PyDateTime_GET_MONTH(val)
dts.day = PyDateTime_GET_DAY(val)
dts.hour = dts.min = dts.sec = dts.us = 0
dts.ps = dts.as = 0
return dtstruct_to_dt64(dts)
4 changes: 2 additions & 2 deletions pandas/_libs/tslibs/offsets.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ np.import_array()

from util cimport is_string_object


from pandas._libs.tslib import pydt_to_i8, tz_convert_single
from conversion cimport tz_convert_single
from pandas._libs.tslib import pydt_to_i8

# ---------------------------------------------------------------------
# Constants
Expand Down