Skip to content

Commit b446c4b

Browse files
authored
REF: Misplaced DatetimeIndex tests (#55614)
* TST: move test files to methods/ directory * REF: tz_localize tests * implement test_round.py * organize DatetimeIndex tests * REF: DTI tests * mv test_asof.py * DTI tests * DTI tests * split tests * DTI tests * woops * better test name
1 parent 3e10647 commit b446c4b

25 files changed

+1721
-1631
lines changed

pandas/tests/indexes/datetimes/methods/test_astype.py

+19
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,25 @@
1818

1919

2020
class TestDatetimeIndex:
21+
@pytest.mark.parametrize("tzstr", ["US/Eastern", "dateutil/US/Eastern"])
22+
def test_dti_astype_asobject_around_dst_transition(self, tzstr):
23+
# GH#1345
24+
25+
# dates around a dst transition
26+
rng = date_range("2/13/2010", "5/6/2010", tz=tzstr)
27+
28+
objs = rng.astype(object)
29+
for i, x in enumerate(objs):
30+
exval = rng[i]
31+
assert x == exval
32+
assert x.tzinfo == exval.tzinfo
33+
34+
objs = rng.astype(object)
35+
for i, x in enumerate(objs):
36+
exval = rng[i]
37+
assert x == exval
38+
assert x.tzinfo == exval.tzinfo
39+
2140
def test_astype(self):
2241
# GH 13149, GH 13209
2342
idx = DatetimeIndex(["2016-05-16", "NaT", NaT, np.nan], name="idx")

pandas/tests/indexes/datetimes/test_delete.py renamed to pandas/tests/indexes/datetimes/methods/test_delete.py

+59-56
Original file line numberDiff line numberDiff line change
@@ -40,28 +40,29 @@ def test_delete(self):
4040
# either depending on numpy version
4141
idx.delete(5)
4242

43-
for tz in [None, "Asia/Tokyo", "US/Pacific"]:
44-
idx = date_range(
45-
start="2000-01-01 09:00", periods=10, freq="h", name="idx", tz=tz
46-
)
47-
48-
expected = date_range(
49-
start="2000-01-01 10:00", periods=9, freq="h", name="idx", tz=tz
50-
)
51-
result = idx.delete(0)
52-
tm.assert_index_equal(result, expected)
53-
assert result.name == expected.name
54-
assert result.freqstr == "h"
55-
assert result.tz == expected.tz
43+
@pytest.mark.parametrize("tz", [None, "Asia/Tokyo", "US/Pacific"])
44+
def test_delete2(self, tz):
45+
idx = date_range(
46+
start="2000-01-01 09:00", periods=10, freq="h", name="idx", tz=tz
47+
)
5648

57-
expected = date_range(
58-
start="2000-01-01 09:00", periods=9, freq="h", name="idx", tz=tz
59-
)
60-
result = idx.delete(-1)
61-
tm.assert_index_equal(result, expected)
62-
assert result.name == expected.name
63-
assert result.freqstr == "h"
64-
assert result.tz == expected.tz
49+
expected = date_range(
50+
start="2000-01-01 10:00", periods=9, freq="h", name="idx", tz=tz
51+
)
52+
result = idx.delete(0)
53+
tm.assert_index_equal(result, expected)
54+
assert result.name == expected.name
55+
assert result.freqstr == "h"
56+
assert result.tz == expected.tz
57+
58+
expected = date_range(
59+
start="2000-01-01 09:00", periods=9, freq="h", name="idx", tz=tz
60+
)
61+
result = idx.delete(-1)
62+
tm.assert_index_equal(result, expected)
63+
assert result.name == expected.name
64+
assert result.freqstr == "h"
65+
assert result.tz == expected.tz
6566

6667
def test_delete_slice(self):
6768
idx = date_range(start="2000-01-01", periods=10, freq="D", name="idx")
@@ -101,38 +102,40 @@ def test_delete_slice(self):
101102
assert result.name == expected.name
102103
assert result.freq == expected.freq
103104

104-
for tz in [None, "Asia/Tokyo", "US/Pacific"]:
105-
ts = Series(
106-
1,
107-
index=date_range(
108-
"2000-01-01 09:00", periods=10, freq="h", name="idx", tz=tz
109-
),
110-
)
111-
# preserve freq
112-
result = ts.drop(ts.index[:5]).index
113-
expected = date_range(
114-
"2000-01-01 14:00", periods=5, freq="h", name="idx", tz=tz
115-
)
116-
tm.assert_index_equal(result, expected)
117-
assert result.name == expected.name
118-
assert result.freq == expected.freq
119-
assert result.tz == expected.tz
120-
121-
# reset freq to None
122-
result = ts.drop(ts.index[[1, 3, 5, 7, 9]]).index
123-
expected = DatetimeIndex(
124-
[
125-
"2000-01-01 09:00",
126-
"2000-01-01 11:00",
127-
"2000-01-01 13:00",
128-
"2000-01-01 15:00",
129-
"2000-01-01 17:00",
130-
],
131-
freq=None,
132-
name="idx",
133-
tz=tz,
134-
)
135-
tm.assert_index_equal(result, expected)
136-
assert result.name == expected.name
137-
assert result.freq == expected.freq
138-
assert result.tz == expected.tz
105+
# TODO: belongs in Series.drop tests?
106+
@pytest.mark.parametrize("tz", [None, "Asia/Tokyo", "US/Pacific"])
107+
def test_delete_slice2(self, tz):
108+
ts = Series(
109+
1,
110+
index=date_range(
111+
"2000-01-01 09:00", periods=10, freq="h", name="idx", tz=tz
112+
),
113+
)
114+
# preserve freq
115+
result = ts.drop(ts.index[:5]).index
116+
expected = date_range(
117+
"2000-01-01 14:00", periods=5, freq="h", name="idx", tz=tz
118+
)
119+
tm.assert_index_equal(result, expected)
120+
assert result.name == expected.name
121+
assert result.freq == expected.freq
122+
assert result.tz == expected.tz
123+
124+
# reset freq to None
125+
result = ts.drop(ts.index[[1, 3, 5, 7, 9]]).index
126+
expected = DatetimeIndex(
127+
[
128+
"2000-01-01 09:00",
129+
"2000-01-01 11:00",
130+
"2000-01-01 13:00",
131+
"2000-01-01 15:00",
132+
"2000-01-01 17:00",
133+
],
134+
freq=None,
135+
name="idx",
136+
tz=tz,
137+
)
138+
tm.assert_index_equal(result, expected)
139+
assert result.name == expected.name
140+
assert result.freq == expected.freq
141+
assert result.tz == expected.tz

pandas/tests/indexes/datetimes/methods/test_isocalendar.py

+7
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,10 @@ def test_isocalendar_returns_correct_values_close_to_new_year_with_tz():
1818
dtype="UInt32",
1919
)
2020
tm.assert_frame_equal(result, expected_data_frame)
21+
22+
23+
def test_dti_timestamp_isocalendar_fields():
24+
idx = tm.makeDateIndex(100)
25+
expected = tuple(idx.isocalendar().iloc[-1].to_list())
26+
result = idx[-1].isocalendar()
27+
assert result == expected
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
from dateutil.tz import tzlocal
2+
import numpy as np
3+
import pytest
4+
5+
import pandas.util._test_decorators as td
6+
7+
from pandas import (
8+
DatetimeIndex,
9+
NaT,
10+
Timestamp,
11+
date_range,
12+
)
13+
import pandas._testing as tm
14+
15+
16+
class TestNormalize:
17+
def test_normalize(self):
18+
rng = date_range("1/1/2000 9:30", periods=10, freq="D")
19+
20+
result = rng.normalize()
21+
expected = date_range("1/1/2000", periods=10, freq="D")
22+
tm.assert_index_equal(result, expected)
23+
24+
arr_ns = np.array([1380585623454345752, 1380585612343234312]).astype(
25+
"datetime64[ns]"
26+
)
27+
rng_ns = DatetimeIndex(arr_ns)
28+
rng_ns_normalized = rng_ns.normalize()
29+
30+
arr_ns = np.array([1380585600000000000, 1380585600000000000]).astype(
31+
"datetime64[ns]"
32+
)
33+
expected = DatetimeIndex(arr_ns)
34+
tm.assert_index_equal(rng_ns_normalized, expected)
35+
36+
assert result.is_normalized
37+
assert not rng.is_normalized
38+
39+
def test_normalize_nat(self):
40+
dti = DatetimeIndex([NaT, Timestamp("2018-01-01 01:00:00")])
41+
result = dti.normalize()
42+
expected = DatetimeIndex([NaT, Timestamp("2018-01-01")])
43+
tm.assert_index_equal(result, expected)
44+
45+
def test_normalize_tz(self):
46+
rng = date_range("1/1/2000 9:30", periods=10, freq="D", tz="US/Eastern")
47+
48+
result = rng.normalize() # does not preserve freq
49+
expected = date_range("1/1/2000", periods=10, freq="D", tz="US/Eastern")
50+
tm.assert_index_equal(result, expected._with_freq(None))
51+
52+
assert result.is_normalized
53+
assert not rng.is_normalized
54+
55+
rng = date_range("1/1/2000 9:30", periods=10, freq="D", tz="UTC")
56+
57+
result = rng.normalize()
58+
expected = date_range("1/1/2000", periods=10, freq="D", tz="UTC")
59+
tm.assert_index_equal(result, expected)
60+
61+
assert result.is_normalized
62+
assert not rng.is_normalized
63+
64+
rng = date_range("1/1/2000 9:30", periods=10, freq="D", tz=tzlocal())
65+
result = rng.normalize() # does not preserve freq
66+
expected = date_range("1/1/2000", periods=10, freq="D", tz=tzlocal())
67+
tm.assert_index_equal(result, expected._with_freq(None))
68+
69+
assert result.is_normalized
70+
assert not rng.is_normalized
71+
72+
@td.skip_if_windows
73+
@pytest.mark.parametrize(
74+
"timezone",
75+
[
76+
"US/Pacific",
77+
"US/Eastern",
78+
"UTC",
79+
"Asia/Kolkata",
80+
"Asia/Shanghai",
81+
"Australia/Canberra",
82+
],
83+
)
84+
def test_normalize_tz_local(self, timezone):
85+
# GH#13459
86+
with tm.set_timezone(timezone):
87+
rng = date_range("1/1/2000 9:30", periods=10, freq="D", tz=tzlocal())
88+
89+
result = rng.normalize()
90+
expected = date_range("1/1/2000", periods=10, freq="D", tz=tzlocal())
91+
expected = expected._with_freq(None)
92+
tm.assert_index_equal(result, expected)
93+
94+
assert result.is_normalized
95+
assert not rng.is_normalized
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from dateutil.tz import tzlocal
2+
import pytest
3+
4+
from pandas.compat import IS64
5+
6+
from pandas import date_range
7+
8+
9+
@pytest.mark.parametrize(
10+
"freq,expected",
11+
[
12+
("Y", "day"),
13+
("Q", "day"),
14+
("ME", "day"),
15+
("D", "day"),
16+
("h", "hour"),
17+
("min", "minute"),
18+
("s", "second"),
19+
("ms", "millisecond"),
20+
("us", "microsecond"),
21+
],
22+
)
23+
def test_dti_resolution(request, tz_naive_fixture, freq, expected):
24+
tz = tz_naive_fixture
25+
if freq == "Y" and not IS64 and isinstance(tz, tzlocal):
26+
request.applymarker(
27+
pytest.mark.xfail(reason="OverflowError inside tzlocal past 2038")
28+
)
29+
30+
idx = date_range(start="2013-04-01", periods=30, freq=freq, tz=tz)
31+
assert idx.resolution == expected

0 commit comments

Comments
 (0)