Skip to content

Commit d8e3f4d

Browse files
author
TrigonaMinima
committed
splitting test_timeseries.py further
1 parent 4072d93 commit d8e3f4d

File tree

6 files changed

+427
-409
lines changed

6 files changed

+427
-409
lines changed

pandas/tests/indexes/datetimes/test_construction.py

+14
Original file line numberDiff line numberDiff line change
@@ -476,3 +476,17 @@ def test_dti_constructor_numpy_timeunits(self):
476476

477477
tm.assert_index_equal(DatetimeIndex(values), base)
478478
tm.assert_index_equal(to_datetime(values), base)
479+
480+
def test_constructor_int64_nocopy(self):
481+
# #1624
482+
arr = np.arange(1000, dtype=np.int64)
483+
index = DatetimeIndex(arr)
484+
485+
arr[50:100] = -1
486+
self.assertTrue((index.asi8[50:100] == -1).all())
487+
488+
arr = np.arange(1000, dtype=np.int64)
489+
index = DatetimeIndex(arr, copy=True)
490+
491+
arr[50:100] = -1
492+
self.assertTrue((index.asi8[50:100] != -1).all())
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
from datetime import datetime, timedelta, time
2+
3+
import pandas as pd
4+
import pandas.util.testing as tm
5+
from pandas import date_range, offsets, DatetimeIndex, Timestamp
6+
7+
from pandas.tests.series.common import TestData
8+
9+
10+
class TestTimeSeries(TestData, tm.TestCase):
11+
_multiprocess_can_split_ = True
12+
13+
14+
def test_date_range_gen_error(self):
15+
rng = date_range('1/1/2000 00:00', '1/1/2000 00:18', freq='5min')
16+
self.assertEqual(len(rng), 4)
17+
18+
def test_date_range_negative_freq(self):
19+
# GH 11018
20+
rng = date_range('2011-12-31', freq='-2A', periods=3)
21+
exp = pd.DatetimeIndex(['2011-12-31', '2009-12-31',
22+
'2007-12-31'], freq='-2A')
23+
tm.assert_index_equal(rng, exp)
24+
self.assertEqual(rng.freq, '-2A')
25+
26+
rng = date_range('2011-01-31', freq='-2M', periods=3)
27+
exp = pd.DatetimeIndex(['2011-01-31', '2010-11-30',
28+
'2010-09-30'], freq='-2M')
29+
tm.assert_index_equal(rng, exp)
30+
self.assertEqual(rng.freq, '-2M')
31+
32+
def test_date_range_bms_bug(self):
33+
# #1645
34+
rng = date_range('1/1/2000', periods=10, freq='BMS')
35+
36+
ex_first = Timestamp('2000-01-03')
37+
self.assertEqual(rng[0], ex_first)
38+
39+
def test_date_range_normalize(self):
40+
snap = datetime.today()
41+
n = 50
42+
43+
rng = date_range(snap, periods=n, normalize=False, freq='2D')
44+
45+
offset = timedelta(2)
46+
values = DatetimeIndex([snap + i * offset for i in range(n)])
47+
48+
tm.assert_index_equal(rng, values)
49+
50+
rng = date_range('1/1/2000 08:15', periods=n, normalize=False,
51+
freq='B')
52+
the_time = time(8, 15)
53+
for val in rng:
54+
self.assertEqual(val.time(), the_time)
55+
56+
def test_date_range_fy5252(self):
57+
dr = date_range(start="2013-01-01", periods=2, freq=offsets.FY5253(
58+
startingMonth=1, weekday=3, variation="nearest"))
59+
self.assertEqual(dr[0], Timestamp('2013-01-31'))
60+
self.assertEqual(dr[1], Timestamp('2014-01-30'))
61+
62+
def test_date_range_ambiguous_arguments(self):
63+
# #2538
64+
start = datetime(2011, 1, 1, 5, 3, 40)
65+
end = datetime(2011, 1, 1, 8, 9, 40)
66+
67+
self.assertRaises(ValueError, date_range, start, end, freq='s',
68+
periods=10)
69+
70+
def test_date_range_businesshour(self):
71+
idx = DatetimeIndex(['2014-07-04 09:00', '2014-07-04 10:00',
72+
'2014-07-04 11:00',
73+
'2014-07-04 12:00', '2014-07-04 13:00',
74+
'2014-07-04 14:00',
75+
'2014-07-04 15:00', '2014-07-04 16:00'],
76+
freq='BH')
77+
rng = date_range('2014-07-04 09:00', '2014-07-04 16:00', freq='BH')
78+
tm.assert_index_equal(idx, rng)
79+
80+
idx = DatetimeIndex(
81+
['2014-07-04 16:00', '2014-07-07 09:00'], freq='BH')
82+
rng = date_range('2014-07-04 16:00', '2014-07-07 09:00', freq='BH')
83+
tm.assert_index_equal(idx, rng)
84+
85+
idx = DatetimeIndex(['2014-07-04 09:00', '2014-07-04 10:00',
86+
'2014-07-04 11:00',
87+
'2014-07-04 12:00', '2014-07-04 13:00',
88+
'2014-07-04 14:00',
89+
'2014-07-04 15:00', '2014-07-04 16:00',
90+
'2014-07-07 09:00', '2014-07-07 10:00',
91+
'2014-07-07 11:00',
92+
'2014-07-07 12:00', '2014-07-07 13:00',
93+
'2014-07-07 14:00',
94+
'2014-07-07 15:00', '2014-07-07 16:00',
95+
'2014-07-08 09:00', '2014-07-08 10:00',
96+
'2014-07-08 11:00',
97+
'2014-07-08 12:00', '2014-07-08 13:00',
98+
'2014-07-08 14:00',
99+
'2014-07-08 15:00', '2014-07-08 16:00'],
100+
freq='BH')
101+
rng = date_range('2014-07-04 09:00', '2014-07-08 16:00', freq='BH')
102+
tm.assert_index_equal(idx, rng)
103+
104+
def test_range_misspecified(self):
105+
# GH #1095
106+
107+
self.assertRaises(ValueError, date_range, '1/1/2000')
108+
self.assertRaises(ValueError, date_range, end='1/1/2000')
109+
self.assertRaises(ValueError, date_range, periods=10)
110+
111+
self.assertRaises(ValueError, date_range, '1/1/2000', freq='H')
112+
self.assertRaises(ValueError, date_range, end='1/1/2000', freq='H')
113+
self.assertRaises(ValueError, date_range, periods=10, freq='H')

pandas/tests/indexes/datetimes/test_misc.py

+108-36
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import numpy as np
22

3+
import pandas as pd
34
import pandas.lib as lib
45
import pandas.util.testing as tm
5-
from pandas import Float64Index, date_range, Timestamp
66
from pandas import (Index, DatetimeIndex, datetime, offsets, to_datetime,
7-
Series, DataFrame)
7+
Series, DataFrame, Float64Index, date_range, Timestamp)
8+
9+
from pandas.util.testing import assert_series_equal
810

911

1012
class TestDateTimeIndexToJulianDate(tm.TestCase):
@@ -130,40 +132,6 @@ def test_range_edges(self):
130132
'1970-01-03', '1970-01-04'])
131133
tm.assert_index_equal(idx, exp)
132134

133-
def test_date_range_businesshour(self):
134-
idx = DatetimeIndex(['2014-07-04 09:00', '2014-07-04 10:00',
135-
'2014-07-04 11:00',
136-
'2014-07-04 12:00', '2014-07-04 13:00',
137-
'2014-07-04 14:00',
138-
'2014-07-04 15:00', '2014-07-04 16:00'],
139-
freq='BH')
140-
rng = date_range('2014-07-04 09:00', '2014-07-04 16:00', freq='BH')
141-
tm.assert_index_equal(idx, rng)
142-
143-
idx = DatetimeIndex(
144-
['2014-07-04 16:00', '2014-07-07 09:00'], freq='BH')
145-
rng = date_range('2014-07-04 16:00', '2014-07-07 09:00', freq='BH')
146-
tm.assert_index_equal(idx, rng)
147-
148-
idx = DatetimeIndex(['2014-07-04 09:00', '2014-07-04 10:00',
149-
'2014-07-04 11:00',
150-
'2014-07-04 12:00', '2014-07-04 13:00',
151-
'2014-07-04 14:00',
152-
'2014-07-04 15:00', '2014-07-04 16:00',
153-
'2014-07-07 09:00', '2014-07-07 10:00',
154-
'2014-07-07 11:00',
155-
'2014-07-07 12:00', '2014-07-07 13:00',
156-
'2014-07-07 14:00',
157-
'2014-07-07 15:00', '2014-07-07 16:00',
158-
'2014-07-08 09:00', '2014-07-08 10:00',
159-
'2014-07-08 11:00',
160-
'2014-07-08 12:00', '2014-07-08 13:00',
161-
'2014-07-08 14:00',
162-
'2014-07-08 15:00', '2014-07-08 16:00'],
163-
freq='BH')
164-
rng = date_range('2014-07-04 09:00', '2014-07-08 16:00', freq='BH')
165-
tm.assert_index_equal(idx, rng)
166-
167135
def test_datetimeindex_integers_shift(self):
168136
rng = date_range('1/1/2000', periods=20)
169137

@@ -185,6 +153,110 @@ def test_datetimeindex_repr_short(self):
185153
dr = date_range(start='1/1/2012', periods=3)
186154
repr(dr)
187155

156+
def test_getitem_setitem_datetimeindex(self):
157+
N = 50
158+
# testing with timezone, GH #2785
159+
rng = date_range('1/1/1990', periods=N, freq='H', tz='US/Eastern')
160+
ts = Series(np.random.randn(N), index=rng)
161+
162+
result = ts["1990-01-01 04:00:00"]
163+
expected = ts[4]
164+
self.assertEqual(result, expected)
165+
166+
result = ts.copy()
167+
result["1990-01-01 04:00:00"] = 0
168+
result["1990-01-01 04:00:00"] = ts[4]
169+
assert_series_equal(result, ts)
170+
171+
result = ts["1990-01-01 04:00:00":"1990-01-01 07:00:00"]
172+
expected = ts[4:8]
173+
assert_series_equal(result, expected)
174+
175+
result = ts.copy()
176+
result["1990-01-01 04:00:00":"1990-01-01 07:00:00"] = 0
177+
result["1990-01-01 04:00:00":"1990-01-01 07:00:00"] = ts[4:8]
178+
assert_series_equal(result, ts)
179+
180+
lb = "1990-01-01 04:00:00"
181+
rb = "1990-01-01 07:00:00"
182+
result = ts[(ts.index >= lb) & (ts.index <= rb)]
183+
expected = ts[4:8]
184+
assert_series_equal(result, expected)
185+
186+
# repeat all the above with naive datetimes
187+
result = ts[datetime(1990, 1, 1, 4)]
188+
expected = ts[4]
189+
self.assertEqual(result, expected)
190+
191+
result = ts.copy()
192+
result[datetime(1990, 1, 1, 4)] = 0
193+
result[datetime(1990, 1, 1, 4)] = ts[4]
194+
assert_series_equal(result, ts)
195+
196+
result = ts[datetime(1990, 1, 1, 4):datetime(1990, 1, 1, 7)]
197+
expected = ts[4:8]
198+
assert_series_equal(result, expected)
199+
200+
result = ts.copy()
201+
result[datetime(1990, 1, 1, 4):datetime(1990, 1, 1, 7)] = 0
202+
result[datetime(1990, 1, 1, 4):datetime(1990, 1, 1, 7)] = ts[4:8]
203+
assert_series_equal(result, ts)
204+
205+
lb = datetime(1990, 1, 1, 4)
206+
rb = datetime(1990, 1, 1, 7)
207+
result = ts[(ts.index >= lb) & (ts.index <= rb)]
208+
expected = ts[4:8]
209+
assert_series_equal(result, expected)
210+
211+
result = ts[ts.index[4]]
212+
expected = ts[4]
213+
self.assertEqual(result, expected)
214+
215+
result = ts[ts.index[4:8]]
216+
expected = ts[4:8]
217+
assert_series_equal(result, expected)
218+
219+
result = ts.copy()
220+
result[ts.index[4:8]] = 0
221+
result[4:8] = ts[4:8]
222+
assert_series_equal(result, ts)
223+
224+
# also test partial date slicing
225+
result = ts["1990-01-02"]
226+
expected = ts[24:48]
227+
assert_series_equal(result, expected)
228+
229+
result = ts.copy()
230+
result["1990-01-02"] = 0
231+
result["1990-01-02"] = ts[24:48]
232+
assert_series_equal(result, ts)
233+
234+
def test_normalize(self):
235+
rng = date_range('1/1/2000 9:30', periods=10, freq='D')
236+
237+
result = rng.normalize()
238+
expected = date_range('1/1/2000', periods=10, freq='D')
239+
tm.assert_index_equal(result, expected)
240+
241+
rng_ns = pd.DatetimeIndex(np.array([1380585623454345752,
242+
1380585612343234312]).astype(
243+
"datetime64[ns]"))
244+
rng_ns_normalized = rng_ns.normalize()
245+
expected = pd.DatetimeIndex(np.array([1380585600000000000,
246+
1380585600000000000]).astype(
247+
"datetime64[ns]"))
248+
tm.assert_index_equal(rng_ns_normalized, expected)
249+
250+
self.assertTrue(result.is_normalized)
251+
self.assertFalse(rng.is_normalized)
252+
253+
def test_series_ctor_plus_datetimeindex(self):
254+
rng = date_range('20090415', '20090519', freq='B')
255+
data = dict((k, 1) for k in rng)
256+
257+
result = Series(data, index=rng)
258+
self.assertIs(result.index, rng)
259+
188260

189261
class TestDatetime64(tm.TestCase):
190262

pandas/tests/scalar/test_timestamp.py

+89-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import pandas._period as period
1313
from pandas.tseries import offsets, frequencies
1414
from pandas.tslib import get_timezone, iNaT
15-
from pandas.compat import long
15+
from pandas.compat import lrange, long
1616
from pandas.util.testing import assert_series_equal
1717
from pandas.compat.numpy import np_datetime64_compat
1818
from pandas import (Timestamp, date_range, Period, Timedelta, tslib, compat,
@@ -1488,3 +1488,91 @@ def test_timestamp_equality(self):
14881488
assert_series_equal(result, Series([True, False]))
14891489
result = s == s[1]
14901490
assert_series_equal(result, Series([False, False]))
1491+
1492+
def test_series_box_timestamp(self):
1493+
rng = date_range('20090415', '20090519', freq='B')
1494+
s = Series(rng)
1495+
1496+
tm.assertIsInstance(s[5], Timestamp)
1497+
1498+
rng = date_range('20090415', '20090519', freq='B')
1499+
s = Series(rng, index=rng)
1500+
tm.assertIsInstance(s[5], Timestamp)
1501+
1502+
tm.assertIsInstance(s.iat[5], Timestamp)
1503+
1504+
def test_frame_setitem_timestamp(self):
1505+
# 2155
1506+
columns = DatetimeIndex(start='1/1/2012', end='2/1/2012',
1507+
freq=offsets.BDay())
1508+
index = lrange(10)
1509+
data = DataFrame(columns=columns, index=index)
1510+
t = datetime(2012, 11, 1)
1511+
ts = Timestamp(t)
1512+
data[ts] = np.nan # works
1513+
1514+
def test_to_html_timestamp(self):
1515+
rng = date_range('2000-01-01', periods=10)
1516+
df = DataFrame(np.random.randn(10, 4), index=rng)
1517+
1518+
result = df.to_html()
1519+
self.assertIn('2000-01-01', result)
1520+
1521+
def test_series_map_box_timestamps(self):
1522+
# #2689, #2627
1523+
s = Series(date_range('1/1/2000', periods=10))
1524+
1525+
def f(x):
1526+
return (x.hour, x.day, x.month)
1527+
1528+
# it works!
1529+
s.map(f)
1530+
s.apply(f)
1531+
DataFrame(s).applymap(f)
1532+
1533+
def test_dti_slicing(self):
1534+
dti = DatetimeIndex(start='1/1/2005', end='12/1/2005', freq='M')
1535+
dti2 = dti[[1, 3, 5]]
1536+
1537+
v1 = dti2[0]
1538+
v2 = dti2[1]
1539+
v3 = dti2[2]
1540+
1541+
self.assertEqual(v1, Timestamp('2/28/2005'))
1542+
self.assertEqual(v2, Timestamp('4/30/2005'))
1543+
self.assertEqual(v3, Timestamp('6/30/2005'))
1544+
1545+
# don't carry freq through irregular slicing
1546+
self.assertIsNone(dti2.freq)
1547+
1548+
def test_woy_boundary(self):
1549+
# make sure weeks at year boundaries are correct
1550+
d = datetime(2013, 12, 31)
1551+
result = Timestamp(d).week
1552+
expected = 1 # ISO standard
1553+
self.assertEqual(result, expected)
1554+
1555+
d = datetime(2008, 12, 28)
1556+
result = Timestamp(d).week
1557+
expected = 52 # ISO standard
1558+
self.assertEqual(result, expected)
1559+
1560+
d = datetime(2009, 12, 31)
1561+
result = Timestamp(d).week
1562+
expected = 53 # ISO standard
1563+
self.assertEqual(result, expected)
1564+
1565+
d = datetime(2010, 1, 1)
1566+
result = Timestamp(d).week
1567+
expected = 53 # ISO standard
1568+
self.assertEqual(result, expected)
1569+
1570+
d = datetime(2010, 1, 3)
1571+
result = Timestamp(d).week
1572+
expected = 53 # ISO standard
1573+
self.assertEqual(result, expected)
1574+
1575+
result = np.array([Timestamp(datetime(*args)).week
1576+
for args in [(2000, 1, 1), (2000, 1, 2), (
1577+
2005, 1, 1), (2005, 1, 2)]])
1578+
self.assertTrue((result == [52, 52, 53, 53]).all())

0 commit comments

Comments
 (0)