diff --git a/pandas/core/window.py b/pandas/core/window.py index f7a60527602a1b..494ab5d5963ee5 100644 --- a/pandas/core/window.py +++ b/pandas/core/window.py @@ -7,41 +7,29 @@ """ from __future__ import division -import warnings -import numpy as np from collections import defaultdict from datetime import timedelta +from textwrap import dedent +import warnings + +import numpy as np + +import pandas._libs.window as libwindow +import pandas.compat as compat +from pandas.compat.numpy import function as nv +from pandas.util._decorators import Appender, Substitution, cache_readonly -from pandas.core.dtypes.generic import ( - ABCSeries, - ABCDataFrame, - ABCDatetimeIndex, - ABCTimedeltaIndex, - ABCPeriodIndex, - ABCDateOffset) from pandas.core.dtypes.common import ( - is_integer, - is_bool, - is_float_dtype, - is_integer_dtype, - needs_i8_conversion, - is_timedelta64_dtype, - is_list_like, - ensure_float64, - is_scalar) + ensure_float64, is_bool, is_float_dtype, is_integer, is_integer_dtype, + is_list_like, is_scalar, is_timedelta64_dtype, needs_i8_conversion) +from pandas.core.dtypes.generic import ( + ABCDataFrame, ABCDateOffset, ABCDatetimeIndex, ABCPeriodIndex, ABCSeries, + ABCTimedeltaIndex) from pandas.core.base import PandasObject, SelectionMixin -from pandas.core.groupby.base import GroupByMixin import pandas.core.common as com -import pandas._libs.window as _window - -from pandas import compat -from pandas.compat.numpy import function as nv -from pandas.util._decorators import (Substitution, Appender, - cache_readonly) from pandas.core.generic import _shared_docs -from textwrap import dedent - +from pandas.core.groupby.base import GroupByMixin _shared_docs = dict(**_shared_docs) _doc_template = """ @@ -688,10 +676,10 @@ def _apply_window(self, mean=True, **kwargs): def f(arg, *args, **kwargs): minp = _use_window(self.min_periods, len(window)) - return _window.roll_window(np.concatenate((arg, - additional_nans)) - if center else arg, window, minp, - avg=mean) + return libwindow.roll_window(np.concatenate((arg, + additional_nans)) + if center else arg, window, minp, + avg=mean) result = np.apply_along_axis(f, self.axis, values) @@ -848,10 +836,10 @@ def _apply(self, func, name=None, window=None, center=None, # if we have a string function name, wrap it if isinstance(func, compat.string_types): - cfunc = getattr(_window, func, None) + cfunc = getattr(libwindow, func, None) if cfunc is None: raise ValueError("we do not support this function " - "in _window.{0}".format(func)) + "in libwindow.{func}".format(func=func)) def func(arg, window, min_periods=None, closed=None): minp = check_minp(min_periods, window) @@ -995,7 +983,7 @@ def f(arg, window, min_periods, closed): minp = _use_window(min_periods, window) if not raw: arg = Series(arg, index=self.obj.index) - return _window.roll_generic( + return libwindow.roll_generic( arg, window, minp, indexi, closed, offset, func, raw, args, kwargs) @@ -1160,8 +1148,8 @@ def std(self, ddof=1, *args, **kwargs): def f(arg, *args, **kwargs): minp = _require_min_periods(1)(self.min_periods, window) - return _zsqrt(_window.roll_var(arg, window, minp, indexi, - self.closed, ddof)) + return _zsqrt(libwindow.roll_var(arg, window, minp, indexi, + self.closed, ddof)) return self._apply(f, 'std', check_minp=_require_min_periods(1), ddof=ddof, **kwargs) @@ -1331,15 +1319,15 @@ def quantile(self, quantile, interpolation='linear', **kwargs): def f(arg, *args, **kwargs): minp = _use_window(self.min_periods, window) if quantile == 1.0: - return _window.roll_max(arg, window, minp, indexi, - self.closed) + return libwindow.roll_max(arg, window, minp, indexi, + self.closed) elif quantile == 0.0: - return _window.roll_min(arg, window, minp, indexi, - self.closed) + return libwindow.roll_min(arg, window, minp, indexi, + self.closed) else: - return _window.roll_quantile(arg, window, minp, indexi, - self.closed, quantile, - interpolation) + return libwindow.roll_quantile(arg, window, minp, indexi, + self.closed, quantile, + interpolation) return self._apply(f, 'quantile', quantile=quantile, **kwargs) @@ -2262,10 +2250,10 @@ def _apply(self, func, **kwargs): # if we have a string function name, wrap it if isinstance(func, compat.string_types): - cfunc = getattr(_window, func, None) + cfunc = getattr(libwindow, func, None) if cfunc is None: raise ValueError("we do not support this function " - "in _window.{0}".format(func)) + "in libwindow.{func}".format(func=func)) def func(arg): return cfunc(arg, self.com, int(self.adjust), @@ -2300,9 +2288,9 @@ def var(self, bias=False, *args, **kwargs): nv.validate_window_func('var', args, kwargs) def f(arg): - return _window.ewmcov(arg, arg, self.com, int(self.adjust), - int(self.ignore_na), int(self.min_periods), - int(bias)) + return libwindow.ewmcov(arg, arg, self.com, int(self.adjust), + int(self.ignore_na), int(self.min_periods), + int(bias)) return self._apply(f, **kwargs) @@ -2320,9 +2308,10 @@ def cov(self, other=None, pairwise=None, bias=False, **kwargs): def _get_cov(X, Y): X = self._shallow_copy(X) Y = self._shallow_copy(Y) - cov = _window.ewmcov(X._prep_values(), Y._prep_values(), self.com, - int(self.adjust), int(self.ignore_na), - int(self.min_periods), int(bias)) + cov = libwindow.ewmcov(X._prep_values(), Y._prep_values(), + self.com, int(self.adjust), + int(self.ignore_na), int(self.min_periods), + int(bias)) return X._wrap_result(cov) return _flex_binary_moment(self._selected_obj, other._selected_obj, @@ -2344,10 +2333,10 @@ def _get_corr(X, Y): Y = self._shallow_copy(Y) def _cov(x, y): - return _window.ewmcov(x, y, self.com, int(self.adjust), - int(self.ignore_na), - int(self.min_periods), - 1) + return libwindow.ewmcov(x, y, self.com, int(self.adjust), + int(self.ignore_na), + int(self.min_periods), + 1) x_values = X._prep_values() y_values = Y._prep_values() diff --git a/pandas/tests/scalar/interval/test_interval.py b/pandas/tests/scalar/interval/test_interval.py index 7951fb7ddda0d6..432f44725e2ba0 100644 --- a/pandas/tests/scalar/interval/test_interval.py +++ b/pandas/tests/scalar/interval/test_interval.py @@ -1,11 +1,11 @@ from __future__ import division import numpy as np -from pandas import Interval, Timestamp, Timedelta -import pandas.core.common as com - import pytest +from pandas import Interval, Timedelta, Timestamp +import pandas.core.common as com + @pytest.fixture def interval(): diff --git a/pandas/tests/scalar/period/test_asfreq.py b/pandas/tests/scalar/period/test_asfreq.py index 23762fda8c22af..064d1a96878c22 100644 --- a/pandas/tests/scalar/period/test_asfreq.py +++ b/pandas/tests/scalar/period/test_asfreq.py @@ -1,11 +1,11 @@ import pytest +from pandas._libs.tslibs.frequencies import ( + INVALID_FREQ_ERR_MSG, _period_code_map) from pandas.errors import OutOfBoundsDatetime -import pandas as pd from pandas import Period, offsets from pandas.util import testing as tm -from pandas._libs.tslibs.frequencies import _period_code_map class TestFreqConversion(object): @@ -328,13 +328,13 @@ def test_conv_weekly(self): assert ival_W.asfreq('W') == ival_W - msg = pd._libs.tslibs.frequencies.INVALID_FREQ_ERR_MSG + msg = INVALID_FREQ_ERR_MSG with pytest.raises(ValueError, match=msg): ival_W.asfreq('WK') def test_conv_weekly_legacy(self): # frequency conversion tests: from Weekly Frequency - msg = pd._libs.tslibs.frequencies.INVALID_FREQ_ERR_MSG + msg = INVALID_FREQ_ERR_MSG with pytest.raises(ValueError, match=msg): Period(freq='WK', year=2007, month=1, day=1) @@ -741,11 +741,11 @@ def test_asfreq_MS(self): assert initial.asfreq(freq="M", how="S") == Period('2013-01', 'M') - msg = pd._libs.tslibs.frequencies.INVALID_FREQ_ERR_MSG + msg = INVALID_FREQ_ERR_MSG with pytest.raises(ValueError, match=msg): initial.asfreq(freq="MS", how="S") with pytest.raises(ValueError, match=msg): - pd.Period('2013-01', 'MS') + Period('2013-01', 'MS') assert _period_code_map.get("MS") is None diff --git a/pandas/tests/scalar/period/test_period.py b/pandas/tests/scalar/period/test_period.py index 14b26bce42d87d..4d3aa1109c1208 100644 --- a/pandas/tests/scalar/period/test_period.py +++ b/pandas/tests/scalar/period/test_period.py @@ -1,20 +1,21 @@ -import pytest +from datetime import date, datetime, timedelta -import pytz import numpy as np -from datetime import datetime, date, timedelta - -import pandas as pd -from pandas import Timedelta, NaT, Period, Timestamp, offsets -import pandas.util.testing as tm -import pandas.core.indexes.period as period -from pandas.compat import text_type, iteritems -from pandas.compat.numpy import np_datetime64_compat +import pytest +import pytz from pandas._libs.tslibs import iNaT, period as libperiod from pandas._libs.tslibs.ccalendar import DAYS, MONTHS +from pandas._libs.tslibs.frequencies import INVALID_FREQ_ERR_MSG from pandas._libs.tslibs.parsing import DateParseError from pandas._libs.tslibs.timezones import dateutil_gettz, maybe_get_tz +from pandas.compat import iteritems, text_type +from pandas.compat.numpy import np_datetime64_compat + +import pandas as pd +from pandas import NaT, Period, Timedelta, Timestamp, offsets +import pandas.core.indexes.period as period +import pandas.util.testing as tm class TestPeriodConstruction(object): @@ -712,7 +713,7 @@ def test_period_deprecated_freq(self): "U": ["MICROSECOND", "MICROSECONDLY", "microsecond"], "N": ["NANOSECOND", "NANOSECONDLY", "nanosecond"]} - msg = pd._libs.tslibs.frequencies.INVALID_FREQ_ERR_MSG + msg = INVALID_FREQ_ERR_MSG for exp, freqs in iteritems(cases): for freq in freqs: with pytest.raises(ValueError, match=msg): @@ -851,7 +852,7 @@ def test_properties_weekly_legacy(self): exp = Period(freq='W', year=2012, month=2, day=1) assert exp.days_in_month == 29 - msg = pd._libs.tslibs.frequencies.INVALID_FREQ_ERR_MSG + msg = INVALID_FREQ_ERR_MSG with pytest.raises(ValueError, match=msg): Period(freq='WK', year=2007, month=1, day=7) diff --git a/pandas/tests/scalar/test_nat.py b/pandas/tests/scalar/test_nat.py index b49da5ed4eb24d..ddf39847441146 100644 --- a/pandas/tests/scalar/test_nat.py +++ b/pandas/tests/scalar/test_nat.py @@ -1,15 +1,16 @@ -import pytest - from datetime import datetime, timedelta -import pytz import numpy as np -from pandas import (NaT, Index, Timestamp, Timedelta, Period, - DatetimeIndex, - TimedeltaIndex, Series, isna) +import pytest +import pytz + +from pandas._libs.tslib import iNaT + +from pandas import ( + DatetimeIndex, Index, NaT, Period, Series, Timedelta, TimedeltaIndex, + Timestamp, isna) from pandas.core.arrays import PeriodArray from pandas.util import testing as tm -from pandas._libs.tslib import iNaT @pytest.mark.parametrize('nat, idx', [(Timestamp('NaT'), DatetimeIndex), diff --git a/pandas/tests/scalar/timedelta/test_arithmetic.py b/pandas/tests/scalar/timedelta/test_arithmetic.py index b9af31db1d6e6c..b6ad251d598ab7 100644 --- a/pandas/tests/scalar/timedelta/test_arithmetic.py +++ b/pandas/tests/scalar/timedelta/test_arithmetic.py @@ -9,9 +9,9 @@ import pytest import pandas as pd -import pandas.util.testing as tm +from pandas import NaT, Timedelta, Timestamp from pandas.core import ops -from pandas import Timedelta, Timestamp, NaT +import pandas.util.testing as tm class TestTimedeltaAdditionSubtraction(object): @@ -189,54 +189,54 @@ def test_td_rsub_offset(self): assert result == Timedelta(-239, unit='h') def test_td_sub_timedeltalike_object_dtype_array(self): - # GH 21980 + # GH#21980 arr = np.array([Timestamp('20130101 9:01'), Timestamp('20121230 9:02')]) exp = np.array([Timestamp('20121231 9:01'), Timestamp('20121229 9:02')]) - res = arr - pd.Timedelta('1D') + res = arr - Timedelta('1D') tm.assert_numpy_array_equal(res, exp) def test_td_sub_mixed_most_timedeltalike_object_dtype_array(self): - # GH 21980 - now = pd.Timestamp.now() + # GH#21980 + now = Timestamp.now() arr = np.array([now, - pd.Timedelta('1D'), + Timedelta('1D'), np.timedelta64(2, 'h')]) - exp = np.array([now - pd.Timedelta('1D'), - pd.Timedelta('0D'), - np.timedelta64(2, 'h') - pd.Timedelta('1D')]) - res = arr - pd.Timedelta('1D') + exp = np.array([now - Timedelta('1D'), + Timedelta('0D'), + np.timedelta64(2, 'h') - Timedelta('1D')]) + res = arr - Timedelta('1D') tm.assert_numpy_array_equal(res, exp) def test_td_rsub_mixed_most_timedeltalike_object_dtype_array(self): - # GH 21980 - now = pd.Timestamp.now() + # GH#21980 + now = Timestamp.now() arr = np.array([now, - pd.Timedelta('1D'), + Timedelta('1D'), np.timedelta64(2, 'h')]) with pytest.raises(TypeError): - pd.Timedelta('1D') - arr + Timedelta('1D') - arr @pytest.mark.parametrize('op', [operator.add, ops.radd]) def test_td_add_timedeltalike_object_dtype_array(self, op): - # GH 21980 + # GH#21980 arr = np.array([Timestamp('20130101 9:01'), Timestamp('20121230 9:02')]) exp = np.array([Timestamp('20130102 9:01'), Timestamp('20121231 9:02')]) - res = op(arr, pd.Timedelta('1D')) + res = op(arr, Timedelta('1D')) tm.assert_numpy_array_equal(res, exp) @pytest.mark.parametrize('op', [operator.add, ops.radd]) def test_td_add_mixed_timedeltalike_object_dtype_array(self, op): - # GH 21980 - now = pd.Timestamp.now() + # GH#21980 + now = Timestamp.now() arr = np.array([now, - pd.Timedelta('1D')]) - exp = np.array([now + pd.Timedelta('1D'), - pd.Timedelta('2D')]) - res = op(arr, pd.Timedelta('1D')) + Timedelta('1D')]) + exp = np.array([now + Timedelta('1D'), + Timedelta('2D')]) + res = op(arr, Timedelta('1D')) tm.assert_numpy_array_equal(res, exp) @@ -255,7 +255,7 @@ class TestTimedeltaMultiplicationDivision(object): # --------------------------------------------------------------- # Timedelta.__mul__, __rmul__ - @pytest.mark.parametrize('td_nat', [pd.NaT, + @pytest.mark.parametrize('td_nat', [NaT, np.timedelta64('NaT', 'ns'), np.timedelta64('NaT')]) @pytest.mark.parametrize('op', [operator.mul, ops.rmul]) @@ -558,7 +558,7 @@ def test_mod_invalid(self): td = Timedelta(hours=37) with pytest.raises(TypeError): - td % pd.Timestamp('2018-01-22') + td % Timestamp('2018-01-22') with pytest.raises(TypeError): td % [] @@ -583,7 +583,7 @@ def test_rmod_invalid(self): td = Timedelta(minutes=3) with pytest.raises(TypeError): - pd.Timestamp('2018-01-22') % td + Timestamp('2018-01-22') % td with pytest.raises(TypeError): 15 % td @@ -608,8 +608,8 @@ def test_divmod_numeric(self): assert result result = divmod(td, np.nan) - assert result[0] is pd.NaT - assert result[1] is pd.NaT + assert result[0] is NaT + assert result[1] is NaT def test_divmod(self): # GH#19365 @@ -625,9 +625,9 @@ def test_divmod(self): assert isinstance(result[1], Timedelta) assert result[1] == Timedelta(0) - result = divmod(td, pd.NaT) + result = divmod(td, NaT) assert np.isnan(result[0]) - assert result[1] is pd.NaT + assert result[1] is NaT def test_divmod_offset(self): # GH#19365 @@ -643,7 +643,7 @@ def test_divmod_invalid(self): td = Timedelta(days=2, hours=6) with pytest.raises(TypeError): - divmod(td, pd.Timestamp('2018-01-22')) + divmod(td, Timestamp('2018-01-22')) def test_rdivmod_pytimedelta(self): # GH#19365 @@ -663,7 +663,7 @@ def test_rdivmod_invalid(self): td = Timedelta(minutes=3) with pytest.raises(TypeError): - divmod(pd.Timestamp('2018-01-22'), td) + divmod(Timestamp('2018-01-22'), td) with pytest.raises(TypeError): divmod(15, td) @@ -684,8 +684,8 @@ def test_rdivmod_invalid(self): ops.rsub]) @pytest.mark.parametrize('arr', [ np.array([Timestamp('20130101 9:01'), Timestamp('20121230 9:02')]), - np.array([pd.Timestamp.now(), pd.Timedelta('1D')]) + np.array([Timestamp.now(), Timedelta('1D')]) ]) def test_td_op_timedelta_timedeltalike_array(self, op, arr): with pytest.raises(TypeError): - op(arr, pd.Timedelta('1D')) + op(arr, Timedelta('1D')) diff --git a/pandas/tests/scalar/timedelta/test_construction.py b/pandas/tests/scalar/timedelta/test_construction.py index 4165b1aec705f2..880eca914749b7 100644 --- a/pandas/tests/scalar/timedelta/test_construction.py +++ b/pandas/tests/scalar/timedelta/test_construction.py @@ -1,11 +1,10 @@ # -*- coding: utf-8 -*- from datetime import timedelta -import pytest import numpy as np +import pytest -import pandas as pd -from pandas import Timedelta +from pandas import Timedelta, offsets, to_timedelta def test_construction(): @@ -107,16 +106,15 @@ def test_construction(): assert Timedelta(10.5, unit='s').value == expected # offset - assert pd.to_timedelta(pd.offsets.Hour(2)) == Timedelta(hours=2) - assert Timedelta(pd.offsets.Hour(2)) == Timedelta(hours=2) - assert Timedelta(pd.offsets.Second(2)) == Timedelta(seconds=2) + assert to_timedelta(offsets.Hour(2)) == Timedelta(hours=2) + assert Timedelta(offsets.Hour(2)) == Timedelta(hours=2) + assert Timedelta(offsets.Second(2)) == Timedelta(seconds=2) # GH#11995: unicode expected = Timedelta('1H') - result = pd.Timedelta(u'1H') + result = Timedelta(u'1H') assert result == expected - assert (pd.to_timedelta(pd.offsets.Hour(2)) == - Timedelta(u'0 days, 02:00:00')) + assert to_timedelta(offsets.Hour(2)) == Timedelta(u'0 days, 02:00:00') with pytest.raises(ValueError): Timedelta(u'foo bar') @@ -154,17 +152,17 @@ def test_td_from_repr_roundtrip(val): def test_overflow_on_construction(): - # xref https://github.com/statsmodels/statsmodels/issues/3374 - value = pd.Timedelta('1day').value * 20169940 + # GH#3374 + value = Timedelta('1day').value * 20169940 with pytest.raises(OverflowError): - pd.Timedelta(value) + Timedelta(value) # xref GH#17637 with pytest.raises(OverflowError): - pd.Timedelta(7 * 19999, unit='D') + Timedelta(7 * 19999, unit='D') with pytest.raises(OverflowError): - pd.Timedelta(timedelta(days=13 * 19999)) + Timedelta(timedelta(days=13 * 19999)) @pytest.mark.parametrize('fmt,exp', [ diff --git a/pandas/tests/scalar/timedelta/test_timedelta.py b/pandas/tests/scalar/timedelta/test_timedelta.py index 58064213d9b3b7..f7dac81a5b8d71 100644 --- a/pandas/tests/scalar/timedelta/test_timedelta.py +++ b/pandas/tests/scalar/timedelta/test_timedelta.py @@ -1,15 +1,17 @@ """ test the scalar Timedelta """ -import pytest +from datetime import timedelta import numpy as np -from datetime import timedelta +import pytest + +from pandas._libs.tslib import NaT, iNaT +import pandas.compat as compat import pandas as pd -import pandas.util.testing as tm +from pandas import ( + Series, Timedelta, TimedeltaIndex, timedelta_range, to_timedelta) from pandas.core.tools.timedeltas import _coerce_scalar_to_timedelta_type as ct -from pandas import (Timedelta, TimedeltaIndex, timedelta_range, Series, - to_timedelta, compat) -from pandas._libs.tslib import iNaT, NaT +import pandas.util.testing as tm class TestTimedeltaArithmetic(object): diff --git a/pandas/tests/scalar/timestamp/test_arithmetic.py b/pandas/tests/scalar/timestamp/test_arithmetic.py index 207bd103105ea8..331d66589802dd 100644 --- a/pandas/tests/scalar/timestamp/test_arithmetic.py +++ b/pandas/tests/scalar/timestamp/test_arithmetic.py @@ -1,14 +1,16 @@ # -*- coding: utf-8 -*- from datetime import datetime, timedelta -import pytest import numpy as np +import pytest -import pandas.util.testing as tm from pandas.compat import long + +from pandas import Timedelta, Timestamp +import pandas.util.testing as tm + from pandas.tseries import offsets from pandas.tseries.frequencies import to_offset -from pandas import Timestamp, Timedelta class TestTimestampArithmetic(object): diff --git a/pandas/tests/scalar/timestamp/test_comparisons.py b/pandas/tests/scalar/timestamp/test_comparisons.py index f293f8f161010a..74dd52c48153f2 100644 --- a/pandas/tests/scalar/timestamp/test_comparisons.py +++ b/pandas/tests/scalar/timestamp/test_comparisons.py @@ -2,10 +2,11 @@ from datetime import datetime import operator -import pytest import numpy as np +import pytest + +from pandas.compat import PY2, long -from pandas.compat import long, PY2 from pandas import Timestamp diff --git a/pandas/tests/scalar/timestamp/test_rendering.py b/pandas/tests/scalar/timestamp/test_rendering.py index c404b60567daf4..29b65ee4df745e 100644 --- a/pandas/tests/scalar/timestamp/test_rendering.py +++ b/pandas/tests/scalar/timestamp/test_rendering.py @@ -1,12 +1,12 @@ # -*- coding: utf-8 -*- -import pytest +from distutils.version import LooseVersion +import pprint + import dateutil +import pytest import pytz # noqa # a test below uses pytz but only inside a `eval` call -import pprint -from distutils.version import LooseVersion - from pandas import Timestamp diff --git a/pandas/tests/scalar/timestamp/test_timestamp.py b/pandas/tests/scalar/timestamp/test_timestamp.py index c1f532d56304c5..2d5c8f77dd3380 100644 --- a/pandas/tests/scalar/timestamp/test_timestamp.py +++ b/pandas/tests/scalar/timestamp/test_timestamp.py @@ -1,29 +1,28 @@ """ test the scalar Timestamp """ -import pytz -import pytest -import dateutil import calendar +from datetime import datetime, timedelta import locale import unicodedata -import numpy as np +import dateutil from dateutil.tz import tzutc +import numpy as np +import pytest +import pytz from pytz import timezone, utc -from datetime import datetime, timedelta -import pandas.util.testing as tm +from pandas._libs.tslibs import conversion +from pandas._libs.tslibs.timezones import dateutil_gettz as gettz, get_timezone +from pandas.compat import PY2, PY3, long +from pandas.compat.numpy import np_datetime64_compat +from pandas.errors import OutOfBoundsDatetime import pandas.util._test_decorators as td -from pandas.tseries import offsets - -from pandas._libs.tslibs import conversion -from pandas._libs.tslibs.timezones import get_timezone, dateutil_gettz as gettz +from pandas import NaT, Period, Timedelta, Timestamp +import pandas.util.testing as tm -from pandas.errors import OutOfBoundsDatetime -from pandas.compat import long, PY3, PY2 -from pandas.compat.numpy import np_datetime64_compat -from pandas import Timestamp, Period, Timedelta, NaT +from pandas.tseries import offsets class TestTimestampProperties(object): diff --git a/pandas/tests/scalar/timestamp/test_timezones.py b/pandas/tests/scalar/timestamp/test_timezones.py index 6755d0bd4ae275..72e4fd42ae15a2 100644 --- a/pandas/tests/scalar/timestamp/test_timezones.py +++ b/pandas/tests/scalar/timestamp/test_timezones.py @@ -2,20 +2,20 @@ """ Tests for Timestamp timezone-related methods """ -from datetime import datetime, date, timedelta - +from datetime import date, datetime, timedelta from distutils.version import LooseVersion + +import dateutil +from dateutil.tz import gettz, tzoffset import pytest import pytz from pytz.exceptions import AmbiguousTimeError, NonExistentTimeError -import dateutil -from dateutil.tz import gettz, tzoffset -import pandas.util.testing as tm +from pandas.errors import OutOfBoundsDatetime import pandas.util._test_decorators as td -from pandas import Timestamp, NaT -from pandas.errors import OutOfBoundsDatetime +from pandas import NaT, Timestamp +import pandas.util.testing as tm class TestTimestampTZOperations(object): diff --git a/pandas/tests/scalar/timestamp/test_unary_ops.py b/pandas/tests/scalar/timestamp/test_unary_ops.py index 21404bf7ef76fd..d3ca85df3fd4f0 100644 --- a/pandas/tests/scalar/timestamp/test_unary_ops.py +++ b/pandas/tests/scalar/timestamp/test_unary_ops.py @@ -1,18 +1,19 @@ # -*- coding: utf-8 -*- from datetime import datetime +from dateutil.tz import gettz import pytest import pytz from pytz import utc -from dateutil.tz import gettz - -import pandas.util.testing as tm -import pandas.util._test_decorators as td -from pandas.compat import PY3 from pandas._libs.tslibs import conversion from pandas._libs.tslibs.frequencies import INVALID_FREQ_ERR_MSG -from pandas import Timestamp, NaT +from pandas.compat import PY3 +import pandas.util._test_decorators as td + +from pandas import NaT, Timestamp +import pandas.util.testing as tm + from pandas.tseries.frequencies import to_offset diff --git a/pandas/tests/tslibs/test_array_to_datetime.py b/pandas/tests/tslibs/test_array_to_datetime.py index f2d9f35256a10a..ff8880257b2256 100644 --- a/pandas/tests/tslibs/test_array_to_datetime.py +++ b/pandas/tests/tslibs/test_array_to_datetime.py @@ -1,13 +1,14 @@ # -*- coding: utf-8 -*- -from datetime import datetime, date +from datetime import date, datetime +from dateutil.tz.tz import tzoffset import numpy as np import pytest import pytz -from dateutil.tz.tz import tzoffset from pandas._libs import iNaT, tslib from pandas.compat.numpy import np_array_datetime64_compat + import pandas.util.testing as tm diff --git a/pandas/tests/tslibs/test_conversion.py b/pandas/tests/tslibs/test_conversion.py index 76038136c26cb6..de36c0bb2f789a 100644 --- a/pandas/tests/tslibs/test_conversion.py +++ b/pandas/tests/tslibs/test_conversion.py @@ -3,11 +3,12 @@ import numpy as np import pytest -import pandas.util.testing as tm -from pandas import date_range from pandas._libs.tslib import iNaT from pandas._libs.tslibs import conversion, timezones +from pandas import date_range +import pandas.util.testing as tm + def compare_utc_to_local(tz_didx, utc_didx): f = lambda x: conversion.tz_convert_single(x, 'UTC', tz_didx.tz) diff --git a/pandas/tests/tslibs/test_libfrequencies.py b/pandas/tests/tslibs/test_libfrequencies.py index 18840fe1fd9b95..1bf6d0596e2fe9 100644 --- a/pandas/tests/tslibs/test_libfrequencies.py +++ b/pandas/tests/tslibs/test_libfrequencies.py @@ -2,11 +2,11 @@ import pytest +from pandas._libs.tslibs.frequencies import ( + INVALID_FREQ_ERR_MSG, _period_str_to_code, get_rule_month, is_subperiod, + is_superperiod) + from pandas.tseries import offsets -from pandas._libs.tslibs.frequencies import (get_rule_month, - _period_str_to_code, - INVALID_FREQ_ERR_MSG, - is_superperiod, is_subperiod) def assert_aliases_deprecated(freq, expected, aliases): diff --git a/pandas/tests/tslibs/test_parsing.py b/pandas/tests/tslibs/test_parsing.py index 2762fb9cbe0000..f2b0ae98aff981 100644 --- a/pandas/tests/tslibs/test_parsing.py +++ b/pandas/tests/tslibs/test_parsing.py @@ -3,15 +3,17 @@ Tests for Timestamp parsing, aimed at pandas/_libs/tslibs/parsing.pyx """ from datetime import datetime + +from dateutil.parser import parse import numpy as np import pytest -from dateutil.parser import parse -import pandas.util._test_decorators as td -from pandas import compat -from pandas.util import testing as tm from pandas._libs.tslibs import parsing from pandas._libs.tslibs.parsing import parse_time_string +import pandas.compat as compat +import pandas.util._test_decorators as td + +from pandas.util import testing as tm class TestParseQuarters(object): diff --git a/pandas/tests/tslibs/test_period_asfreq.py b/pandas/tests/tslibs/test_period_asfreq.py index 61737083e22ead..e5978a59bc2a17 100644 --- a/pandas/tests/tslibs/test_period_asfreq.py +++ b/pandas/tests/tslibs/test_period_asfreq.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from pandas._libs.tslibs.frequencies import get_freq -from pandas._libs.tslibs.period import period_ordinal, period_asfreq +from pandas._libs.tslibs.period import period_asfreq, period_ordinal class TestPeriodFreqConversion(object): diff --git a/pandas/tests/tslibs/test_timezones.py b/pandas/tests/tslibs/test_timezones.py index 12f04505d953d6..68a6c1b09b9929 100644 --- a/pandas/tests/tslibs/test_timezones.py +++ b/pandas/tests/tslibs/test_timezones.py @@ -1,11 +1,12 @@ # -*- coding: utf-8 -*- from datetime import datetime +import dateutil.tz import pytest import pytz -import dateutil.tz -from pandas._libs.tslibs import timezones, conversion +from pandas._libs.tslibs import conversion, timezones + from pandas import Timestamp diff --git a/pandas/tests/tslibs/test_tslib.py b/pandas/tests/tslibs/test_tslib.py index 0df9328d0db160..17bd46cd235da5 100644 --- a/pandas/tests/tslibs/test_tslib.py +++ b/pandas/tests/tslibs/test_tslib.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Tests for functions from pandas._libs.tslibs""" -from datetime import datetime, date +from datetime import date, datetime from pandas._libs import tslibs diff --git a/pandas/tseries/converter.py b/pandas/tseries/converter.py index 26d3f3cb85edcb..05dd7cea1bd2fb 100644 --- a/pandas/tseries/converter.py +++ b/pandas/tseries/converter.py @@ -1,15 +1,11 @@ # flake8: noqa import warnings -from pandas.plotting._converter import (time2num, - TimeConverter, TimeFormatter, - PeriodConverter, get_datevalue, - DatetimeConverter, - PandasAutoDateFormatter, - PandasAutoDateLocator, - MilliSecondLocator, get_finder, - TimeSeries_DateLocator, - TimeSeries_DateFormatter) +from pandas.plotting._converter import ( + DatetimeConverter, MilliSecondLocator, PandasAutoDateFormatter, + PandasAutoDateLocator, PeriodConverter, TimeConverter, TimeFormatter, + TimeSeries_DateFormatter, TimeSeries_DateLocator, get_datevalue, + get_finder, time2num) def register(): diff --git a/pandas/tseries/frequencies.py b/pandas/tseries/frequencies.py index ac9a87b2580564..95904fab053221 100644 --- a/pandas/tseries/frequencies.py +++ b/pandas/tseries/frequencies.py @@ -1,40 +1,37 @@ # -*- coding: utf-8 -*- from datetime import timedelta -from pandas.compat import zip -from pandas import compat import re import numpy as np +from pytz import AmbiguousTimeError -from pandas.util._decorators import cache_readonly - -from pandas.core.dtypes.generic import ABCSeries -from pandas.core.dtypes.common import ( - is_period_arraylike, - is_timedelta64_dtype, - is_datetime64_dtype) - -from pandas.core.algorithms import unique - -from pandas.tseries.offsets import DateOffset - +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.frequencies import ( # noqa, semi-public API - get_freq, get_base_alias, get_to_timestamp_base, get_freq_code, - FreqGroup, + FreqGroup, get_base_alias, get_freq, get_freq_code, get_to_timestamp_base, is_subperiod, is_superperiod) -from pandas._libs.tslibs.ccalendar import MONTH_ALIASES, int_to_weekday +from pandas._libs.tslibs.offsets import _offset_to_period_map # noqa:E402 import pandas._libs.tslibs.resolution as libresolution from pandas._libs.tslibs.resolution import Resolution -from pandas._libs.tslibs.fields import build_field_sarray -from pandas._libs.tslibs.conversion import tz_convert +import pandas.compat as compat +from pandas.compat import zip +from pandas.util._decorators import cache_readonly -from pandas._libs.algos import unique_deltas +from pandas.core.dtypes.common import ( + is_datetime64_dtype, is_period_arraylike, is_timedelta64_dtype) +from pandas.core.dtypes.generic import ABCSeries -from pytz import AmbiguousTimeError +from pandas.core.algorithms import unique +from pandas.tseries.offsets import ( # noqa + BDay, BMonthBegin, BMonthEnd, BQuarterBegin, BQuarterEnd, BYearBegin, + BYearEnd, CDay, DateOffset, Day, Hour, Micro, Milli, Minute, MonthBegin, + MonthEnd, Nano, QuarterBegin, QuarterEnd, Second, Week, YearBegin, YearEnd, + prefix_mapping) RESO_NS = 0 RESO_US = 1 @@ -54,14 +51,6 @@ # --------------------------------------------------------------------- # Offset names ("time rules") and related functions -from pandas._libs.tslibs.offsets import _offset_to_period_map # noqa:E402 -from pandas.tseries.offsets import (Nano, Micro, Milli, Second, # noqa - Minute, Hour, - Day, BDay, CDay, Week, MonthBegin, - MonthEnd, BMonthBegin, BMonthEnd, - QuarterBegin, QuarterEnd, BQuarterBegin, - BQuarterEnd, YearBegin, YearEnd, - BYearBegin, BYearEnd, prefix_mapping) try: cday = CDay() except NotImplementedError: diff --git a/pandas/tseries/holiday.py b/pandas/tseries/holiday.py index 0497a827e2e1b2..40e2b76672a4e0 100644 --- a/pandas/tseries/holiday.py +++ b/pandas/tseries/holiday.py @@ -1,13 +1,16 @@ +from datetime import datetime, timedelta import warnings -from pandas import DateOffset, DatetimeIndex, Series, Timestamp -from pandas.errors import PerformanceWarning -from pandas.compat import add_metaclass -from datetime import datetime, timedelta -from dateutil.relativedelta import MO, TU, WE, TH, FR, SA, SU # noqa -from pandas.tseries.offsets import Easter, Day +from dateutil.relativedelta import FR, MO, SA, SU, TH, TU, WE # noqa import numpy as np +from pandas.compat import add_metaclass +from pandas.errors import PerformanceWarning + +from pandas import DateOffset, DatetimeIndex, Series, Timestamp + +from pandas.tseries.offsets import Day, Easter + def next_monday(dt): """ diff --git a/pandas/tseries/offsets.py b/pandas/tseries/offsets.py index 440a6a3558d9e5..ca81b3bcfef2a0 100644 --- a/pandas/tseries/offsets.py +++ b/pandas/tseries/offsets.py @@ -3,33 +3,24 @@ import functools import operator -from pandas.compat import range -from pandas import compat -import numpy as np - -from pandas.core.dtypes.generic import ABCPeriod -from pandas.core.tools.datetimes import to_datetime - -# import after tools, dateutil check from dateutil.easter import easter -from pandas._libs import tslibs, Timestamp, OutOfBoundsDatetime, Timedelta -from pandas.util._decorators import cache_readonly +import numpy as np from pandas._libs.tslibs import ( - ccalendar, conversion, - frequencies as libfrequencies) -from pandas._libs.tslibs.timedeltas import delta_to_nanoseconds -import pandas._libs.tslibs.offsets as liboffsets + NaT, OutOfBoundsDatetime, Timedelta, Timestamp, ccalendar, conversion, + delta_to_nanoseconds, frequencies as libfrequencies, normalize_date, + offsets as liboffsets) from pandas._libs.tslibs.offsets import ( - ApplyTypeError, - as_datetime, _is_normalized, - _get_calendar, _to_dt64, - apply_index_wraps, - roll_yearday, - shift_month, - BaseOffset) + ApplyTypeError, BaseOffset, _get_calendar, _is_normalized, _to_dt64, + apply_index_wraps, as_datetime, roll_yearday, shift_month) +import pandas.compat as compat +from pandas.compat import range from pandas.errors import AbstractMethodError +from pandas.util._decorators import cache_readonly +from pandas.core.dtypes.generic import ABCPeriod + +from pandas.core.tools.datetimes import to_datetime __all__ = ['Day', 'BusinessDay', 'BDay', 'CustomBusinessDay', 'CDay', 'CBMonthEnd', 'CBMonthBegin', @@ -60,8 +51,8 @@ def as_timestamp(obj): def apply_wraps(func): @functools.wraps(func) def wrapper(self, other): - if other is tslibs.NaT: - return tslibs.NaT + if other is NaT: + return NaT elif isinstance(other, (timedelta, Tick, DateOffset)): # timedelta path return func(self, other) @@ -103,7 +94,7 @@ def wrapper(self, other): if self.normalize: # normalize_date returns normal datetime - result = tslibs.normalize_date(result) + result = normalize_date(result) if tz is not None and result.tzinfo is None: result = conversion.localize_pydatetime(result, tz) diff --git a/setup.cfg b/setup.cfg index 0214922585077e..e8db1308741aa5 100644 --- a/setup.cfg +++ b/setup.cfg @@ -20,7 +20,8 @@ ignore = E731, # do not assign a lambda expression, use a def C406, # Unnecessary list literal - rewrite as a dict literal. C408, # Unnecessary dict call - rewrite as a literal. - C409 # Unnecessary list passed to tuple() - rewrite as a tuple literal. + C409, # Unnecessary list passed to tuple() - rewrite as a tuple literal. + S001 # found modulo formatter (incorrect picks up mod operations) exclude = doc/sphinxext/*.py, doc/build/*.py, @@ -113,7 +114,6 @@ skip= pandas/core/ops.py, pandas/core/categorical.py, pandas/core/api.py, - pandas/core/window.py, pandas/core/indexing.py, pandas/core/apply.py, pandas/core/generic.py, @@ -258,26 +258,6 @@ skip= pandas/tests/arithmetic/test_datetime64.py, pandas/tests/arithmetic/conftest.py, pandas/tests/arithmetic/test_timedelta64.py, - pandas/tests/scalar/test_nat.py, - pandas/tests/scalar/timestamp/test_rendering.py, - pandas/tests/scalar/timestamp/test_timestamp.py, - pandas/tests/scalar/timestamp/test_timezones.py, - pandas/tests/scalar/timestamp/test_unary_ops.py, - pandas/tests/scalar/timestamp/test_arithmetic.py, - pandas/tests/scalar/timestamp/test_comparisons.py, - pandas/tests/scalar/period/test_asfreq.py, - pandas/tests/scalar/period/test_period.py, - pandas/tests/scalar/timedelta/test_construction.py, - pandas/tests/scalar/timedelta/test_timedelta.py, - pandas/tests/scalar/timedelta/test_arithmetic.py, - pandas/tests/scalar/interval/test_interval.py, - pandas/tests/tslibs/test_tslib.py, - pandas/tests/tslibs/test_period_asfreq.py, - pandas/tests/tslibs/test_timezones.py, - pandas/tests/tslibs/test_libfrequencies.py, - pandas/tests/tslibs/test_parsing.py, - pandas/tests/tslibs/test_array_to_datetime.py, - pandas/tests/tslibs/test_conversion.py, pandas/tests/internals/test_internals.py, pandas/tests/groupby/test_value_counts.py, pandas/tests/groupby/test_filters.py, @@ -387,10 +367,6 @@ skip= pandas/tests/sparse/frame/conftest.py, pandas/tests/computation/test_compat.py, pandas/tests/computation/test_eval.py, - pandas/tseries/holiday.py, - pandas/tseries/converter.py, - pandas/tseries/offsets.py, - pandas/tseries/frequencies.py, pandas/plotting/_core.py, pandas/plotting/_style.py, pandas/plotting/_timeseries.py,