|
6 | 6 | import pandas._period as period
|
7 | 7 | import datetime
|
8 | 8 |
|
| 9 | +import pandas as pd |
9 | 10 | from pandas.core.api import Timestamp, Series, Timedelta, Period, to_datetime
|
10 | 11 | from pandas.tslib import get_timezone
|
11 | 12 | from pandas._period import period_asfreq, period_ordinal
|
|
22 | 23 |
|
23 | 24 |
|
24 | 25 | class TestTimestamp(tm.TestCase):
|
| 26 | + |
25 | 27 | def test_constructor(self):
|
26 | 28 | base_str = '2014-07-01 09:00'
|
27 | 29 | base_dt = datetime.datetime(2014, 7, 1, 9)
|
@@ -915,37 +917,85 @@ def test_nanosecond_timestamp(self):
|
915 | 917 |
|
916 | 918 | def test_nat_arithmetic(self):
|
917 | 919 | # GH 6873
|
918 |
| - nat = tslib.NaT |
919 |
| - t = Timestamp('2014-01-01') |
920 |
| - dt = datetime.datetime(2014, 1, 1) |
921 |
| - delta = datetime.timedelta(3600) |
922 |
| - td = Timedelta('5s') |
923 | 920 | i = 2
|
924 | 921 | f = 1.5
|
925 | 922 |
|
926 |
| - for (left, right) in [(nat, i), (nat, f), (nat, np.nan)]: |
927 |
| - self.assertTrue((left / right) is nat) |
928 |
| - self.assertTrue((left * right) is nat) |
929 |
| - self.assertTrue((right * left) is nat) |
| 923 | + for (left, right) in [(pd.NaT, i), (pd.NaT, f), (pd.NaT, np.nan)]: |
| 924 | + self.assertIs(left / right, pd.NaT) |
| 925 | + self.assertIs(left * right, pd.NaT) |
| 926 | + self.assertIs(right * left, pd.NaT) |
930 | 927 | with tm.assertRaises(TypeError):
|
931 | 928 | right / left
|
932 | 929 |
|
933 | 930 | # Timestamp / datetime
|
934 |
| - for (left, right) in [(nat, nat), (nat, t), (nat, dt)]: |
| 931 | + t = Timestamp('2014-01-01') |
| 932 | + dt = datetime.datetime(2014, 1, 1) |
| 933 | + for (left, right) in [(pd.NaT, pd.NaT), (pd.NaT, t), (pd.NaT, dt)]: |
935 | 934 | # NaT __add__ or __sub__ Timestamp-like (or inverse) returns NaT
|
936 |
| - self.assertTrue((right + left) is nat) |
937 |
| - self.assertTrue((left + right) is nat) |
938 |
| - self.assertTrue((left - right) is nat) |
939 |
| - self.assertTrue((right - left) is nat) |
| 935 | + self.assertIs(right + left, pd.NaT) |
| 936 | + self.assertIs(left + right, pd.NaT) |
| 937 | + self.assertIs(left - right, pd.NaT) |
| 938 | + self.assertIs(right - left, pd.NaT) |
940 | 939 |
|
941 | 940 | # timedelta-like
|
942 | 941 | # offsets are tested in test_offsets.py
|
943 |
| - for (left, right) in [(nat, delta), (nat, td)]: |
| 942 | + |
| 943 | + delta = datetime.timedelta(3600) |
| 944 | + td = Timedelta('5s') |
| 945 | + |
| 946 | + for (left, right) in [(pd.NaT, delta), (pd.NaT, td)]: |
944 | 947 | # NaT + timedelta-like returns NaT
|
945 |
| - self.assertTrue((right + left) is nat) |
946 |
| - self.assertTrue((left + right) is nat) |
947 |
| - self.assertTrue((right - left) is nat) |
948 |
| - self.assertTrue((left - right) is nat) |
| 948 | + self.assertIs(right + left, pd.NaT) |
| 949 | + self.assertIs(left + right, pd.NaT) |
| 950 | + self.assertIs(right - left, pd.NaT) |
| 951 | + self.assertIs(left - right, pd.NaT) |
| 952 | + |
| 953 | + # GH 11718 |
| 954 | + tm._skip_if_no_pytz() |
| 955 | + import pytz |
| 956 | + |
| 957 | + t_utc = Timestamp('2014-01-01', tz='UTC') |
| 958 | + t_tz = Timestamp('2014-01-01', tz='US/Eastern') |
| 959 | + dt_tz = pytz.timezone('Asia/Tokyo').localize(dt) |
| 960 | + |
| 961 | + for (left, right) in [(pd.NaT, t_utc), (pd.NaT, t_tz), |
| 962 | + (pd.NaT, dt_tz)]: |
| 963 | + # NaT __add__ or __sub__ Timestamp-like (or inverse) returns NaT |
| 964 | + self.assertIs(right + left, pd.NaT) |
| 965 | + self.assertIs(left + right, pd.NaT) |
| 966 | + self.assertIs(left - right, pd.NaT) |
| 967 | + self.assertIs(right - left, pd.NaT) |
| 968 | + |
| 969 | + def test_nat_arithmetic_index(self): |
| 970 | + # GH 11718 |
| 971 | + |
| 972 | + # datetime |
| 973 | + tm._skip_if_no_pytz() |
| 974 | + |
| 975 | + dti = pd.DatetimeIndex(['2011-01-01', '2011-01-02'], name='x') |
| 976 | + exp = pd.DatetimeIndex([pd.NaT, pd.NaT], name='x') |
| 977 | + self.assert_index_equal(dti + pd.NaT, exp) |
| 978 | + self.assert_index_equal(pd.NaT + dti, exp) |
| 979 | + |
| 980 | + dti_tz = pd.DatetimeIndex(['2011-01-01', '2011-01-02'], |
| 981 | + tz='US/Eastern', name='x') |
| 982 | + exp = pd.DatetimeIndex([pd.NaT, pd.NaT], name='x', tz='US/Eastern') |
| 983 | + self.assert_index_equal(dti_tz + pd.NaT, exp) |
| 984 | + self.assert_index_equal(pd.NaT + dti_tz, exp) |
| 985 | + |
| 986 | + exp = pd.TimedeltaIndex([pd.NaT, pd.NaT], name='x') |
| 987 | + for (left, right) in [(pd.NaT, dti), (pd.NaT, dti_tz)]: |
| 988 | + self.assert_index_equal(left - right, exp) |
| 989 | + self.assert_index_equal(right - left, exp) |
| 990 | + |
| 991 | + # timedelta |
| 992 | + tdi = pd.TimedeltaIndex(['1 day', '2 day'], name='x') |
| 993 | + exp = pd.DatetimeIndex([pd.NaT, pd.NaT], name='x') |
| 994 | + for (left, right) in [(pd.NaT, tdi)]: |
| 995 | + self.assert_index_equal(left + right, exp) |
| 996 | + self.assert_index_equal(right + left, exp) |
| 997 | + self.assert_index_equal(left - right, exp) |
| 998 | + self.assert_index_equal(right - left, exp) |
949 | 999 |
|
950 | 1000 |
|
951 | 1001 | class TestTslib(tm.TestCase):
|
@@ -1173,8 +1223,8 @@ def test_resolution(self):
|
1173 | 1223 | period.H_RESO, period.T_RESO,
|
1174 | 1224 | period.S_RESO, period.MS_RESO,
|
1175 | 1225 | period.US_RESO]):
|
1176 |
| - for tz in [None, 'Asia/Tokyo', 'US/Eastern', 'dateutil/US/Eastern' |
1177 |
| - ]: |
| 1226 | + for tz in [None, 'Asia/Tokyo', 'US/Eastern', |
| 1227 | + 'dateutil/US/Eastern']: |
1178 | 1228 | idx = date_range(start='2013-04-01', periods=30, freq=freq,
|
1179 | 1229 | tz=tz)
|
1180 | 1230 | result = period.resolution(idx.asi8, idx.tz)
|
|
0 commit comments