Skip to content

Commit

Permalink
Remove unnecessary usage of _TSObject (#17297)
Browse files Browse the repository at this point in the history
  • Loading branch information
jbrockmendel authored and jreback committed Aug 21, 2017
1 parent 91c2f1f commit eff1f88
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 81 deletions.
20 changes: 0 additions & 20 deletions pandas/_libs/period.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
32 changes: 0 additions & 32 deletions pandas/_libs/src/datetime.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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


Expand Down Expand Up @@ -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)
Expand All @@ -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):
Expand Down
35 changes: 6 additions & 29 deletions pandas/_libs/tslib.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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)):
Expand Down Expand Up @@ -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)):
Expand All @@ -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 (
Expand Down Expand Up @@ -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)):
Expand All @@ -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 (
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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


Expand All @@ -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:
Expand Down Expand Up @@ -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]
Expand Down

0 comments on commit eff1f88

Please sign in to comment.