Skip to content

Remove unnecessary usage of _TSObject #17297

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 5 commits into from
Aug 21, 2017
Merged
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
20 changes: 0 additions & 20 deletions pandas/_libs/period.pyx
Original file line number Diff line number Diff line change
@@ -120,26 +120,6 @@ initialize_daytime_conversion_factor_matrix()
# Period logic
#----------------------------------------------------------------------

cdef inline int64_t apply_mult(int64_t period_ord, int64_t mult):
"""
Get freq+multiple ordinal value from corresponding freq-only ordinal value.
For example, 5min ordinal will be 1/5th the 1min ordinal (rounding down to
integer).
"""
if mult == 1:
return period_ord

return (period_ord - 1) // mult

cdef inline int64_t remove_mult(int64_t period_ord_w_mult, int64_t mult):
"""
Get freq-only ordinal value from corresponding freq+multiple ordinal.
"""
if mult == 1:
return period_ord_w_mult

return period_ord_w_mult * mult + 1;


@cython.wraparound(False)
@cython.boundscheck(False)
32 changes: 0 additions & 32 deletions pandas/_libs/src/datetime.pxd
Original file line number Diff line number Diff line change
@@ -88,11 +88,6 @@ cdef extern from "datetime/np_datetime.h":
int cmp_pandas_datetimestruct(pandas_datetimestruct *a,
pandas_datetimestruct *b)

int convert_pydatetime_to_datetimestruct(PyObject *obj,
pandas_datetimestruct *out,
PANDAS_DATETIMEUNIT *out_bestunit,
int apply_tzinfo)

npy_datetime pandas_datetimestruct_to_datetime(PANDAS_DATETIMEUNIT fr,
pandas_datetimestruct *d) nogil
void pandas_datetime_to_datetimestruct(npy_datetime val,
@@ -112,12 +107,6 @@ cdef extern from "datetime/np_datetime_strings.h":
PANDAS_DATETIMEUNIT *out_bestunit,
npy_bool *out_special)

int make_iso_8601_datetime(pandas_datetimestruct *dts, char *outstr, int outlen,
int local, PANDAS_DATETIMEUNIT base, int tzoffset,
NPY_CASTING casting)

int get_datetime_iso_8601_strlen(int local, PANDAS_DATETIMEUNIT base)

# int parse_python_string(object obj, pandas_datetimestruct *out) except -1


@@ -152,16 +141,6 @@ cdef inline int _cstring_to_dts(char *val, int length,
return result


cdef inline object _datetime64_to_datetime(int64_t val):
cdef pandas_datetimestruct dts
pandas_datetime_to_datetimestruct(val, PANDAS_FR_ns, &dts)
return _dts_to_pydatetime(&dts)

cdef inline object _dts_to_pydatetime(pandas_datetimestruct *dts):
return <object> PyDateTime_FromDateAndTime(dts.year, dts.month,
dts.day, dts.hour,
dts.min, dts.sec, dts.us)

cdef inline int64_t _pydatetime_to_dts(object val, pandas_datetimestruct *dts):
dts.year = PyDateTime_GET_YEAR(val)
dts.month = PyDateTime_GET_MONTH(val)
@@ -173,17 +152,6 @@ cdef inline int64_t _pydatetime_to_dts(object val, pandas_datetimestruct *dts):
dts.ps = dts.as = 0
return pandas_datetimestruct_to_datetime(PANDAS_FR_ns, dts)

cdef inline int64_t _dtlike_to_datetime64(object val,
pandas_datetimestruct *dts):
dts.year = val.year
dts.month = val.month
dts.day = val.day
dts.hour = val.hour
dts.min = val.minute
dts.sec = val.second
dts.us = val.microsecond
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):
35 changes: 6 additions & 29 deletions pandas/_libs/tslib.pyx
Original file line number Diff line number Diff line change
@@ -705,7 +705,6 @@ class Timestamp(_Timestamp):
pandas_datetimestruct dts
int64_t value
object _tzinfo, result, k, v
_TSObject ts

# set to naive if needed
_tzinfo = self.tzinfo
@@ -1009,10 +1008,6 @@ def unique_deltas(ndarray[int64_t] arr):
return result


cdef inline bint _is_multiple(int64_t us, int64_t mult):
return us % mult == 0


cdef inline bint _cmp_scalar(int64_t lhs, int64_t rhs, int op) except -1:
if op == Py_EQ:
return lhs == rhs
@@ -4694,7 +4689,6 @@ def get_date_field(ndarray[int64_t] dtindex, object field):
field and return an array of these values.
"""
cdef:
_TSObject ts
Py_ssize_t i, count = 0
ndarray[int32_t] out
ndarray[int32_t, ndim=2] _month_offset
@@ -4876,7 +4870,6 @@ def get_start_end_field(ndarray[int64_t] dtindex, object field,
(defined by frequency).
"""
cdef:
_TSObject ts
Py_ssize_t i
int count = 0
bint is_business = 0
@@ -4925,9 +4918,8 @@ def get_start_end_field(ndarray[int64_t] dtindex, object field,

pandas_datetime_to_datetimestruct(
dtindex[i], PANDAS_FR_ns, &dts)
ts = convert_to_tsobject(dtindex[i], None, None, 0, 0)
dom = dts.day
dow = ts_dayofweek(ts)
dow = dayofweek(dts.year, dts.month, dts.day)

if (dom == 1 and dow < 5) or (dom <= 3 and dow == 0):
out[i] = 1
@@ -4951,13 +4943,12 @@ def get_start_end_field(ndarray[int64_t] dtindex, object field,

pandas_datetime_to_datetimestruct(
dtindex[i], PANDAS_FR_ns, &dts)
ts = convert_to_tsobject(dtindex[i], None, None, 0, 0)
isleap = is_leapyear(dts.year)
mo_off = _month_offset[isleap, dts.month - 1]
dom = dts.day
doy = mo_off + dom
ldom = _month_offset[isleap, dts.month]
dow = ts_dayofweek(ts)
dow = dayofweek(dts.year, dts.month, dts.day)

if (ldom == doy and dow < 5) or (
dow == 4 and (ldom - doy <= 2)):
@@ -4986,9 +4977,8 @@ def get_start_end_field(ndarray[int64_t] dtindex, object field,

pandas_datetime_to_datetimestruct(
dtindex[i], PANDAS_FR_ns, &dts)
ts = convert_to_tsobject(dtindex[i], None, None, 0, 0)
dom = dts.day
dow = ts_dayofweek(ts)
dow = dayofweek(dts.year, dts.month, dts.day)

if ((dts.month - start_month) % 3 == 0) and (
(dom == 1 and dow < 5) or (dom <= 3 and dow == 0)):
@@ -5013,13 +5003,12 @@ def get_start_end_field(ndarray[int64_t] dtindex, object field,

pandas_datetime_to_datetimestruct(
dtindex[i], PANDAS_FR_ns, &dts)
ts = convert_to_tsobject(dtindex[i], None, None, 0, 0)
isleap = is_leapyear(dts.year)
mo_off = _month_offset[isleap, dts.month - 1]
dom = dts.day
doy = mo_off + dom
ldom = _month_offset[isleap, dts.month]
dow = ts_dayofweek(ts)
dow = dayofweek(dts.year, dts.month, dts.day)

if ((dts.month - end_month) % 3 == 0) and (
(ldom == doy and dow < 5) or (
@@ -5049,9 +5038,8 @@ def get_start_end_field(ndarray[int64_t] dtindex, object field,

pandas_datetime_to_datetimestruct(
dtindex[i], PANDAS_FR_ns, &dts)
ts = convert_to_tsobject(dtindex[i], None, None, 0, 0)
dom = dts.day
dow = ts_dayofweek(ts)
dow = dayofweek(dts.year, dts.month, dts.day)

if (dts.month == start_month) and (
(dom == 1 and dow < 5) or (dom <= 3 and dow == 0)):
@@ -5076,12 +5064,11 @@ def get_start_end_field(ndarray[int64_t] dtindex, object field,

pandas_datetime_to_datetimestruct(
dtindex[i], PANDAS_FR_ns, &dts)
ts = convert_to_tsobject(dtindex[i], None, None, 0, 0)
isleap = is_leapyear(dts.year)
dom = dts.day
mo_off = _month_offset[isleap, dts.month - 1]
doy = mo_off + dom
dow = ts_dayofweek(ts)
dow = dayofweek(dts.year, dts.month, dts.day)
ldom = _month_offset[isleap, dts.month]

if (dts.month == end_month) and (
@@ -5095,7 +5082,6 @@ def get_start_end_field(ndarray[int64_t] dtindex, object field,

pandas_datetime_to_datetimestruct(
dtindex[i], PANDAS_FR_ns, &dts)
ts = convert_to_tsobject(dtindex[i], None, None, 0, 0)
isleap = is_leapyear(dts.year)
mo_off = _month_offset[isleap, dts.month - 1]
dom = dts.day
@@ -5117,7 +5103,6 @@ def get_date_name_field(ndarray[int64_t] dtindex, object field):
name based on requested field (e.g. weekday_name)
"""
cdef:
_TSObject ts
Py_ssize_t i, count = 0
ndarray[object] out
pandas_datetimestruct dts
@@ -5143,10 +5128,6 @@ def get_date_name_field(ndarray[int64_t] dtindex, object field):
raise ValueError("Field %s not supported" % field)


cdef inline int m8_weekday(int64_t val):
ts = convert_to_tsobject(val, None, None, 0, 0)
return ts_dayofweek(ts)

cdef int64_t DAY_NS = 86400000000000LL


@@ -5156,11 +5137,9 @@ def date_normalize(ndarray[int64_t] stamps, tz=None):
cdef:
Py_ssize_t i, n = len(stamps)
pandas_datetimestruct dts
_TSObject tso
ndarray[int64_t] result = np.empty(n, dtype=np.int64)

if tz is not None:
tso = _TSObject()
tz = maybe_get_tz(tz)
result = _normalize_local(stamps, tz)
else:
@@ -5305,8 +5284,6 @@ def monthrange(int64_t year, int64_t month):

return (dayofweek(year, month, 1), days)

cdef inline int64_t ts_dayofweek(_TSObject ts):
return dayofweek(ts.dts.year, ts.dts.month, ts.dts.day)

cdef inline int days_in_month(pandas_datetimestruct dts) nogil:
return days_per_month_table[is_leapyear(dts.year)][dts.month -1]