Skip to content

Replaced PANDAS_DATETIMEUNIT with NPY_DATETIMEUNIT #21863

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 4 commits into from
Jul 12, 2018
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
69 changes: 35 additions & 34 deletions pandas/_libs/src/datetime/np_datetime.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ This file is derived from NumPy 1.7. See NUMPY_LICENSE.txt

#include <numpy/arrayobject.h>
#include <numpy/arrayscalars.h>
#include <numpy/ndarraytypes.h>
#include "np_datetime.h"

#if PY_MAJOR_VERSION >= 3
Expand Down Expand Up @@ -511,21 +512,21 @@ int convert_pydatetime_to_datetimestruct(PyObject *obj,
return -1;
}

npy_datetime pandas_datetimestruct_to_datetime(PANDAS_DATETIMEUNIT fr,
npy_datetime pandas_datetimestruct_to_datetime(NPY_DATETIMEUNIT fr,
pandas_datetimestruct *d) {
npy_datetime result = PANDAS_DATETIME_NAT;
npy_datetime result = NPY_DATETIME_NAT;

convert_datetimestruct_to_datetime(fr, d, &result);
return result;
}

void pandas_datetime_to_datetimestruct(npy_datetime val, PANDAS_DATETIMEUNIT fr,
void pandas_datetime_to_datetimestruct(npy_datetime val, NPY_DATETIMEUNIT fr,
pandas_datetimestruct *result) {
convert_datetime_to_datetimestruct(fr, val, result);
}

void pandas_timedelta_to_timedeltastruct(npy_timedelta val,
PANDAS_DATETIMEUNIT fr,
NPY_DATETIMEUNIT fr,
pandas_timedeltastruct *result) {
convert_timedelta_to_timedeltastruct(fr, val, result);
}
Expand All @@ -537,71 +538,71 @@ void pandas_timedelta_to_timedeltastruct(npy_timedelta val,
*
* Returns 0 on success, -1 on failure.
*/
int convert_datetimestruct_to_datetime(PANDAS_DATETIMEUNIT base,
int convert_datetimestruct_to_datetime(NPY_DATETIMEUNIT base,
const pandas_datetimestruct *dts,
npy_datetime *out) {
npy_datetime ret;

if (base == PANDAS_FR_Y) {
if (base == NPY_FR_Y) {
/* Truncate to the year */
ret = dts->year - 1970;
} else if (base == PANDAS_FR_M) {
} else if (base == NPY_FR_M) {
/* Truncate to the month */
ret = 12 * (dts->year - 1970) + (dts->month - 1);
} else {
/* Otherwise calculate the number of days to start */
npy_int64 days = get_datetimestruct_days(dts);

switch (base) {
case PANDAS_FR_W:
case NPY_FR_W:
/* Truncate to weeks */
if (days >= 0) {
ret = days / 7;
} else {
ret = (days - 6) / 7;
}
break;
case PANDAS_FR_D:
case NPY_FR_D:
ret = days;
break;
case PANDAS_FR_h:
case NPY_FR_h:
ret = days * 24 + dts->hour;
break;
case PANDAS_FR_m:
case NPY_FR_m:
ret = (days * 24 + dts->hour) * 60 + dts->min;
break;
case PANDAS_FR_s:
case NPY_FR_s:
ret = ((days * 24 + dts->hour) * 60 + dts->min) * 60 + dts->sec;
break;
case PANDAS_FR_ms:
case NPY_FR_ms:
ret = (((days * 24 + dts->hour) * 60 + dts->min) * 60 +
dts->sec) *
1000 +
dts->us / 1000;
break;
case PANDAS_FR_us:
case NPY_FR_us:
ret = (((days * 24 + dts->hour) * 60 + dts->min) * 60 +
dts->sec) *
1000000 +
dts->us;
break;
case PANDAS_FR_ns:
case NPY_FR_ns:
ret = ((((days * 24 + dts->hour) * 60 + dts->min) * 60 +
dts->sec) *
1000000 +
dts->us) *
1000 +
dts->ps / 1000;
break;
case PANDAS_FR_ps:
case NPY_FR_ps:
ret = ((((days * 24 + dts->hour) * 60 + dts->min) * 60 +
dts->sec) *
1000000 +
dts->us) *
1000000 +
dts->ps;
break;
case PANDAS_FR_fs:
case NPY_FR_fs:
/* only 2.6 hours */
ret = (((((days * 24 + dts->hour) * 60 + dts->min) * 60 +
dts->sec) *
Expand All @@ -612,7 +613,7 @@ int convert_datetimestruct_to_datetime(PANDAS_DATETIMEUNIT base,
1000 +
dts->as / 1000;
break;
case PANDAS_FR_as:
case NPY_FR_as:
/* only 9.2 secs */
ret = (((((days * 24 + dts->hour) * 60 + dts->min) * 60 +
dts->sec) *
Expand Down Expand Up @@ -640,7 +641,7 @@ int convert_datetimestruct_to_datetime(PANDAS_DATETIMEUNIT base,
/*
* Converts a datetime based on the given metadata into a datetimestruct
*/
int convert_datetime_to_datetimestruct(PANDAS_DATETIMEUNIT base,
int convert_datetime_to_datetimestruct(NPY_DATETIMEUNIT base,
npy_datetime dt,
pandas_datetimestruct *out) {
npy_int64 perday;
Expand All @@ -656,11 +657,11 @@ int convert_datetime_to_datetimestruct(PANDAS_DATETIMEUNIT base,
* for negative values.
*/
switch (base) {
case PANDAS_FR_Y:
case NPY_FR_Y:
out->year = 1970 + dt;
break;

case PANDAS_FR_M:
case NPY_FR_M:
if (dt >= 0) {
out->year = 1970 + dt / 12;
out->month = dt % 12 + 1;
Expand All @@ -670,16 +671,16 @@ int convert_datetime_to_datetimestruct(PANDAS_DATETIMEUNIT base,
}
break;

case PANDAS_FR_W:
case NPY_FR_W:
/* A week is 7 days */
set_datetimestruct_days(dt * 7, out);
break;

case PANDAS_FR_D:
case NPY_FR_D:
set_datetimestruct_days(dt, out);
break;

case PANDAS_FR_h:
case NPY_FR_h:
perday = 24LL;

if (dt >= 0) {
Expand All @@ -693,7 +694,7 @@ int convert_datetime_to_datetimestruct(PANDAS_DATETIMEUNIT base,
out->hour = dt;
break;

case PANDAS_FR_m:
case NPY_FR_m:
perday = 24LL * 60;

if (dt >= 0) {
Expand All @@ -708,7 +709,7 @@ int convert_datetime_to_datetimestruct(PANDAS_DATETIMEUNIT base,
out->min = dt % 60;
break;

case PANDAS_FR_s:
case NPY_FR_s:
perday = 24LL * 60 * 60;

if (dt >= 0) {
Expand All @@ -724,7 +725,7 @@ int convert_datetime_to_datetimestruct(PANDAS_DATETIMEUNIT base,
out->sec = dt % 60;
break;

case PANDAS_FR_ms:
case NPY_FR_ms:
perday = 24LL * 60 * 60 * 1000;

if (dt >= 0) {
Expand All @@ -741,7 +742,7 @@ int convert_datetime_to_datetimestruct(PANDAS_DATETIMEUNIT base,
out->us = (dt % 1000LL) * 1000;
break;

case PANDAS_FR_us:
case NPY_FR_us:
perday = 24LL * 60LL * 60LL * 1000LL * 1000LL;

if (dt >= 0) {
Expand All @@ -758,7 +759,7 @@ int convert_datetime_to_datetimestruct(PANDAS_DATETIMEUNIT base,
out->us = dt % 1000000LL;
break;

case PANDAS_FR_ns:
case NPY_FR_ns:
perday = 24LL * 60LL * 60LL * 1000LL * 1000LL * 1000LL;

if (dt >= 0) {
Expand All @@ -776,7 +777,7 @@ int convert_datetime_to_datetimestruct(PANDAS_DATETIMEUNIT base,
out->ps = (dt % 1000LL) * 1000;
break;

case PANDAS_FR_ps:
case NPY_FR_ps:
perday = 24LL * 60 * 60 * 1000 * 1000 * 1000 * 1000;

if (dt >= 0) {
Expand All @@ -794,7 +795,7 @@ int convert_datetime_to_datetimestruct(PANDAS_DATETIMEUNIT base,
out->ps = dt % 1000000LL;
break;

case PANDAS_FR_fs:
case NPY_FR_fs:
/* entire range is only +- 2.6 hours */
if (dt >= 0) {
out->hour = dt / (60 * 60 * 1000000000000000LL);
Expand All @@ -821,7 +822,7 @@ int convert_datetime_to_datetimestruct(PANDAS_DATETIMEUNIT base,
}
break;

case PANDAS_FR_as:
case NPY_FR_as:
/* entire range is only +- 9.2 seconds */
if (dt >= 0) {
out->sec = (dt / 1000000000000000000LL) % 60;
Expand Down Expand Up @@ -861,7 +862,7 @@ int convert_datetime_to_datetimestruct(PANDAS_DATETIMEUNIT base,
*
* Returns 0 on success, -1 on failure.
*/
int convert_timedelta_to_timedeltastruct(PANDAS_DATETIMEUNIT base,
int convert_timedelta_to_timedeltastruct(NPY_DATETIMEUNIT base,
npy_timedelta td,
pandas_timedeltastruct *out) {
npy_int64 frac;
Expand All @@ -874,7 +875,7 @@ int convert_timedelta_to_timedeltastruct(PANDAS_DATETIMEUNIT base,
memset(out, 0, sizeof(pandas_timedeltastruct));

switch (base) {
case PANDAS_FR_ns:
case NPY_FR_ns:

// put frac in seconds
if (td < 0 && td % (1000LL * 1000LL * 1000LL) != 0)
Expand Down
31 changes: 4 additions & 27 deletions pandas/_libs/src/datetime/np_datetime.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,29 +19,6 @@ This file is derived from NumPy 1.7. See NUMPY_LICENSE.txt

#include <numpy/ndarraytypes.h>

typedef enum {
PANDAS_FR_Y = 0, // Years
PANDAS_FR_M = 1, // Months
PANDAS_FR_W = 2, // Weeks
// Gap where NPY_FR_B was
PANDAS_FR_D = 4, // Days
PANDAS_FR_h = 5, // hours
PANDAS_FR_m = 6, // minutes
PANDAS_FR_s = 7, // seconds
PANDAS_FR_ms = 8, // milliseconds
PANDAS_FR_us = 9, // microseconds
PANDAS_FR_ns = 10, // nanoseconds
PANDAS_FR_ps = 11, // picoseconds
PANDAS_FR_fs = 12, // femtoseconds
PANDAS_FR_as = 13, // attoseconds
PANDAS_FR_GENERIC = 14 // Generic, unbound units, can
// convert to anything
} PANDAS_DATETIMEUNIT;

#define PANDAS_DATETIME_NUMUNITS 13

#define PANDAS_DATETIME_NAT NPY_MIN_INT64

typedef struct {
npy_int64 year;
npy_int32 month, day, hour, min, sec, us, ps, as;
Expand All @@ -61,14 +38,14 @@ extern const pandas_datetimestruct _NS_MAX_DTS;
int convert_pydatetime_to_datetimestruct(PyObject *obj,
pandas_datetimestruct *out);

npy_datetime pandas_datetimestruct_to_datetime(PANDAS_DATETIMEUNIT fr,
npy_datetime pandas_datetimestruct_to_datetime(NPY_DATETIMEUNIT fr,
pandas_datetimestruct *d);

void pandas_datetime_to_datetimestruct(npy_datetime val, PANDAS_DATETIMEUNIT fr,
void pandas_datetime_to_datetimestruct(npy_datetime val, NPY_DATETIMEUNIT fr,
pandas_datetimestruct *result);

void pandas_timedelta_to_timedeltastruct(npy_timedelta val,
PANDAS_DATETIMEUNIT fr,
NPY_DATETIMEUNIT fr,
pandas_timedeltastruct *result);

int dayofweek(int y, int m, int d);
Expand Down Expand Up @@ -103,7 +80,7 @@ add_minutes_to_datetimestruct(pandas_datetimestruct *dts, int minutes);


int
convert_datetime_to_datetimestruct(PANDAS_DATETIMEUNIT base,
convert_datetime_to_datetimestruct(NPY_DATETIMEUNIT base,
npy_datetime dt,
pandas_datetimestruct *out);

Expand Down
Loading