From ecc9249ece3f1c4bcee536d401155230b879c6ee Mon Sep 17 00:00:00 2001 From: Matt Roeschke Date: Sat, 20 Apr 2019 16:03:51 -0700 Subject: [PATCH 1/3] CLN: tslib cython imports --- pandas/_libs/tslibs/c_timestamp.pyx | 8 +++----- pandas/_libs/tslibs/conversion.pyx | 9 +++------ pandas/_libs/tslibs/timedeltas.pyx | 4 +--- pandas/_libs/tslibs/timestamps.pyx | 1 - 4 files changed, 7 insertions(+), 15 deletions(-) diff --git a/pandas/_libs/tslibs/c_timestamp.pyx b/pandas/_libs/tslibs/c_timestamp.pyx index 67d9092ceb0d5..f01131c3c82c1 100644 --- a/pandas/_libs/tslibs/c_timestamp.pyx +++ b/pandas/_libs/tslibs/c_timestamp.pyx @@ -23,8 +23,6 @@ cimport numpy as cnp from numpy cimport int64_t, int8_t cnp.import_array() -from dateutil.tz import tzutc - from cpython.datetime cimport (datetime, PyDateTime_Check, PyDelta_Check, PyDateTime_IMPORT) @@ -38,9 +36,9 @@ from pandas._libs.tslibs.fields import get_start_end_field, get_date_name_field from pandas._libs.tslibs.nattype cimport c_NaT as NaT from pandas._libs.tslibs.np_datetime import OutOfBoundsDatetime from pandas._libs.tslibs.np_datetime cimport ( - reverse_ops, cmp_scalar, npy_datetimestruct, dt64_to_dtstruct) + reverse_ops, cmp_scalar) from pandas._libs.tslibs.timezones cimport ( - get_timezone, get_utcoffset, is_utc, tz_compare) + get_timezone, is_utc, tz_compare) from pandas._libs.tslibs.timezones import UTC from pandas._libs.tslibs.tzconversion cimport tz_convert_single @@ -381,5 +379,5 @@ cdef class _Timestamp(datetime): def timestamp(self): """Return POSIX timestamp as float.""" - # py27 compat, see GH#17329 + # Note: tz-aware Timestamps will return a UTC-like timestamp return round(self.value / 1e9, 6) diff --git a/pandas/_libs/tslibs/conversion.pyx b/pandas/_libs/tslibs/conversion.pyx index c0d0329ac0e72..1309ee948f86a 100644 --- a/pandas/_libs/tslibs/conversion.pyx +++ b/pandas/_libs/tslibs/conversion.pyx @@ -3,23 +3,20 @@ import cython import numpy as np cimport numpy as cnp -from numpy cimport uint8_t, int64_t, int32_t, intp_t, ndarray +from numpy cimport int64_t, int32_t, intp_t, ndarray cnp.import_array() import pytz -from dateutil.tz import tzutc # stdlib datetime imports from datetime import time as datetime_time from cpython.datetime cimport (datetime, tzinfo, PyDateTime_Check, PyDate_Check, - PyDateTime_IMPORT, PyDelta_Check) + PyDateTime_IMPORT) PyDateTime_IMPORT from pandas._libs.tslibs.c_timestamp cimport _Timestamp -from pandas._libs.tslibs.ccalendar import DAY_SECONDS, HOUR_SECONDS - from pandas._libs.tslibs.np_datetime cimport ( check_dts_bounds, npy_datetimestruct, pandas_datetime_to_datetimestruct, _string_to_dts, npy_datetime, dt64_to_dtstruct, dtstruct_to_dt64, @@ -42,7 +39,7 @@ from pandas._libs.tslibs.nattype cimport ( NPY_NAT, checknull_with_nat, c_NaT as NaT) from pandas._libs.tslibs.tzconversion import ( - tz_localize_to_utc, tz_convert, tz_convert_single) + tz_localize_to_utc, tz_convert_single) from pandas._libs.tslibs.tzconversion cimport _tz_convert_tzlocal_utc # ---------------------------------------------------------------------- diff --git a/pandas/_libs/tslibs/timedeltas.pyx b/pandas/_libs/tslibs/timedeltas.pyx index 8b71d64db26c6..2a35a9c803834 100644 --- a/pandas/_libs/tslibs/timedeltas.pyx +++ b/pandas/_libs/tslibs/timedeltas.pyx @@ -3,8 +3,6 @@ import collections import textwrap import warnings -import sys - import cython from cpython cimport Py_NE, Py_EQ, PyObject_RichCompare @@ -14,7 +12,7 @@ cimport numpy as cnp from numpy cimport int64_t cnp.import_array() -from cpython.datetime cimport (datetime, timedelta, +from cpython.datetime cimport (timedelta, PyDateTime_Check, PyDelta_Check, PyDateTime_IMPORT) PyDateTime_IMPORT diff --git a/pandas/_libs/tslibs/timestamps.pyx b/pandas/_libs/tslibs/timestamps.pyx index eb676d2265f9f..7340e716ec651 100644 --- a/pandas/_libs/tslibs/timestamps.pyx +++ b/pandas/_libs/tslibs/timestamps.pyx @@ -22,7 +22,6 @@ from pandas._libs.tslibs.conversion import normalize_i8_timestamps from pandas._libs.tslibs.conversion cimport ( _TSObject, convert_to_tsobject, convert_datetime_to_tsobject) -from pandas._libs.tslibs.fields import get_start_end_field, get_date_name_field from pandas._libs.tslibs.nattype cimport NPY_NAT, c_NaT as NaT from pandas._libs.tslibs.np_datetime cimport ( check_dts_bounds, npy_datetimestruct, dt64_to_dtstruct) From 2cfdab1fd8ef11905f85336c64a19600d893764a Mon Sep 17 00:00:00 2001 From: Matt Roeschke Date: Sat, 20 Apr 2019 18:17:30 -0700 Subject: [PATCH 2/3] fix import and put back issue reference --- pandas/_libs/tslibs/c_timestamp.pyx | 3 ++- pandas/tseries/frequencies.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/pandas/_libs/tslibs/c_timestamp.pyx b/pandas/_libs/tslibs/c_timestamp.pyx index f01131c3c82c1..30f3f1c24e607 100644 --- a/pandas/_libs/tslibs/c_timestamp.pyx +++ b/pandas/_libs/tslibs/c_timestamp.pyx @@ -379,5 +379,6 @@ cdef class _Timestamp(datetime): def timestamp(self): """Return POSIX timestamp as float.""" - # Note: tz-aware Timestamps will return a UTC-like timestamp + # GH 17329 + # Note: Naive timestamps will not match datetime.stdlib return round(self.value / 1e9, 6) diff --git a/pandas/tseries/frequencies.py b/pandas/tseries/frequencies.py index ce5da63e9665b..c7b392a280694 100644 --- a/pandas/tseries/frequencies.py +++ b/pandas/tseries/frequencies.py @@ -9,13 +9,13 @@ from pandas._libs.algos import unique_deltas from pandas._libs.tslibs import Timedelta, Timestamp from pandas._libs.tslibs.ccalendar import MONTH_ALIASES, int_to_weekday -from pandas._libs.tslibs.conversion import tz_convert from pandas._libs.tslibs.fields import build_field_sarray import pandas._libs.tslibs.frequencies as libfreqs from pandas._libs.tslibs.offsets import _offset_to_period_map import pandas._libs.tslibs.resolution as libresolution from pandas._libs.tslibs.resolution import Resolution from pandas._libs.tslibs.timezones import UTC +from pandas._libs.tslibs.tzconversion import tz_convert from pandas.util._decorators import cache_readonly from pandas.core.dtypes.common import ( From 2c5688c13a68e5ffd205fa4343005b53ad63c2c5 Mon Sep 17 00:00:00 2001 From: Matt Roeschke Date: Sat, 20 Apr 2019 22:20:40 -0700 Subject: [PATCH 3/3] Fix more imports --- pandas/core/arrays/datetimes.py | 8 ++++---- pandas/tests/tslibs/test_conversion.py | 12 ++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/pandas/core/arrays/datetimes.py b/pandas/core/arrays/datetimes.py index 09a3d53efdd07..a87801eeff57d 100644 --- a/pandas/core/arrays/datetimes.py +++ b/pandas/core/arrays/datetimes.py @@ -10,7 +10,7 @@ from pandas._libs import lib, tslib from pandas._libs.tslibs import ( NaT, Timestamp, ccalendar, conversion, fields, iNaT, normalize_date, - resolution as libresolution, timezones) + resolution as libresolution, timezones, tzconversion) import pandas.compat as compat from pandas.errors import PerformanceWarning from pandas.util._decorators import Appender @@ -784,7 +784,7 @@ def _local_timestamps(self): This is used to calculate time-of-day information as if the timestamps were timezone-naive. """ - return conversion.tz_convert(self.asi8, utc, self.tz) + return tzconversion.tz_convert(self.asi8, utc, self.tz) def tz_convert(self, tz): """ @@ -1032,8 +1032,8 @@ def tz_localize(self, tz, ambiguous='raise', nonexistent='raise', if self.tz is not None: if tz is None: - new_dates = conversion.tz_convert(self.asi8, timezones.UTC, - self.tz) + new_dates = tzconversion.tz_convert(self.asi8, timezones.UTC, + self.tz) else: raise TypeError("Already tz-aware, use tz_convert to convert.") else: diff --git a/pandas/tests/tslibs/test_conversion.py b/pandas/tests/tslibs/test_conversion.py index d909c981c3981..3bbd7ba2ed06d 100644 --- a/pandas/tests/tslibs/test_conversion.py +++ b/pandas/tests/tslibs/test_conversion.py @@ -7,7 +7,7 @@ from pytz import UTC from pandas._libs.tslib import iNaT -from pandas._libs.tslibs import conversion, timezones +from pandas._libs.tslibs import conversion, timezones, tzconversion from pandas import Timestamp, date_range import pandas.util.testing as tm @@ -17,7 +17,7 @@ def _compare_utc_to_local(tz_didx): def f(x): return conversion.tz_convert_single(x, UTC, tz_didx.tz) - result = conversion.tz_convert(tz_didx.asi8, UTC, tz_didx.tz) + result = tzconversion.tz_convert(tz_didx.asi8, UTC, tz_didx.tz) expected = np.vectorize(f)(tz_didx.asi8) tm.assert_numpy_array_equal(result, expected) @@ -27,7 +27,7 @@ def _compare_local_to_utc(tz_didx, utc_didx): def f(x): return conversion.tz_convert_single(x, tz_didx.tz, UTC) - result = conversion.tz_convert(utc_didx.asi8, tz_didx.tz, UTC) + result = tzconversion.tz_convert(utc_didx.asi8, tz_didx.tz, UTC) expected = np.vectorize(f)(utc_didx.asi8) tm.assert_numpy_array_equal(result, expected) @@ -56,9 +56,9 @@ def test_tz_convert_single_matches_tz_convert(tz_aware_fixture, freq): pytest.param(np.array([], dtype=np.int64), id="empty"), pytest.param(np.array([iNaT], dtype=np.int64), id="all_nat")]) def test_tz_convert_corner(arr): - result = conversion.tz_convert(arr, - timezones.maybe_get_tz("US/Eastern"), - timezones.maybe_get_tz("Asia/Tokyo")) + result = tzconversion.tz_convert(arr, + timezones.maybe_get_tz("US/Eastern"), + timezones.maybe_get_tz("Asia/Tokyo")) tm.assert_numpy_array_equal(result, arr)