Skip to content

Commit 52cdc34

Browse files
authored
TST: move misplaced tests (#55603)
* CLN: split large tests * REF: misplaced tests * TST: improve tet * comment * TST: move misplaced tests * mypy fixup
1 parent a5e55fb commit 52cdc34

19 files changed

+417
-416
lines changed

pandas/tests/arrays/test_datetimes.py

-8
Original file line numberDiff line numberDiff line change
@@ -746,14 +746,6 @@ def test_iter_zoneinfo_fold(self, tz):
746746
assert str(left) == str(right2)
747747
assert left.utcoffset() == right2.utcoffset()
748748

749-
def test_date_range_frequency_M_deprecated(self):
750-
depr_msg = "'M' will be deprecated, please use 'ME' instead."
751-
752-
expected = pd.date_range("1/1/2000", periods=4, freq="2ME")
753-
with tm.assert_produces_warning(UserWarning, match=depr_msg):
754-
result = pd.date_range("1/1/2000", periods=4, freq="2M")
755-
tm.assert_index_equal(result, expected)
756-
757749

758750
def test_factorize_sort_without_freq():
759751
dta = DatetimeArray._from_sequence([0, 2, 1])

pandas/tests/frame/methods/test_map.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
)
1313
import pandas._testing as tm
1414

15+
from pandas.tseries.offsets import BDay
16+
1517

1618
def test_map(float_frame):
1719
result = float_frame.map(lambda x: x * 2)
@@ -158,8 +160,6 @@ def test_map_box():
158160

159161

160162
def test_frame_map_dont_convert_datetime64():
161-
from pandas.tseries.offsets import BDay
162-
163163
df = DataFrame({"x1": [datetime(1996, 1, 1)]})
164164

165165
df = df.map(lambda x: x + BDay())

pandas/tests/groupby/test_grouping.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,7 @@ def test_grouper_creation_bug(self):
245245
expected = expected.loc[:, ["A", "B"]]
246246
tm.assert_frame_equal(result, expected)
247247

248+
def test_grouper_creation_bug2(self):
248249
# GH14334
249250
# Grouper(key=...) may be passed in a list
250251
df = DataFrame(
@@ -275,24 +276,25 @@ def test_grouper_creation_bug(self):
275276
result = g.sum()
276277
tm.assert_frame_equal(result, expected)
277278

279+
def test_grouper_creation_bug3(self):
278280
# GH8866
279-
s = Series(
281+
ser = Series(
280282
np.arange(8, dtype="int64"),
281283
index=MultiIndex.from_product(
282284
[list("ab"), range(2), date_range("20130101", periods=2)],
283285
names=["one", "two", "three"],
284286
),
285287
)
286-
result = s.groupby(Grouper(level="three", freq="ME")).sum()
288+
result = ser.groupby(Grouper(level="three", freq="ME")).sum()
287289
expected = Series(
288290
[28],
289291
index=pd.DatetimeIndex([Timestamp("2013-01-31")], freq="ME", name="three"),
290292
)
291293
tm.assert_series_equal(result, expected)
292294

293295
# just specifying a level breaks
294-
result = s.groupby(Grouper(level="one")).sum()
295-
expected = s.groupby(level="one").sum()
296+
result = ser.groupby(Grouper(level="one")).sum()
297+
expected = ser.groupby(level="one").sum()
296298
tm.assert_series_equal(result, expected)
297299

298300
def test_grouper_column_and_index(self):

pandas/tests/indexes/datetimes/test_constructors.py

-6
Original file line numberDiff line numberDiff line change
@@ -1110,9 +1110,3 @@ def test_pass_datetimeindex_to_index(self):
11101110
expected = Index(rng.to_pydatetime(), dtype=object)
11111111

11121112
tm.assert_numpy_array_equal(idx.values, expected.values)
1113-
1114-
def test_date_range_tuple_freq_raises(self):
1115-
# GH#34703
1116-
edate = datetime(2000, 1, 1)
1117-
with pytest.raises(TypeError, match="pass as a string instead"):
1118-
date_range(end=edate, freq=("D", 5), periods=20)

pandas/tests/indexes/datetimes/test_date_range.py

+53
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,20 @@ def test_date_range_timestamp_equiv_preserve_frequency(self):
124124

125125

126126
class TestDateRanges:
127+
def test_date_range_frequency_M_deprecated(self):
128+
depr_msg = "'M' will be deprecated, please use 'ME' instead."
129+
130+
expected = date_range("1/1/2000", periods=4, freq="2ME")
131+
with tm.assert_produces_warning(UserWarning, match=depr_msg):
132+
result = date_range("1/1/2000", periods=4, freq="2M")
133+
tm.assert_index_equal(result, expected)
134+
135+
def test_date_range_tuple_freq_raises(self):
136+
# GH#34703
137+
edate = datetime(2000, 1, 1)
138+
with pytest.raises(TypeError, match="pass as a string instead"):
139+
date_range(end=edate, freq=("D", 5), periods=20)
140+
127141
@pytest.mark.parametrize("freq", ["ns", "us", "ms", "min", "s", "h", "D"])
128142
def test_date_range_edges(self, freq):
129143
# GH#13672
@@ -911,6 +925,45 @@ def test_date_range_with_tz(self, tzstr):
911925

912926
assert stamp == rng[1]
913927

928+
@pytest.mark.parametrize("tz", ["Europe/London", "dateutil/Europe/London"])
929+
def test_date_range_ambiguous_endpoint(self, tz):
930+
# construction with an ambiguous end-point
931+
# GH#11626
932+
933+
with pytest.raises(pytz.AmbiguousTimeError, match="Cannot infer dst time"):
934+
date_range(
935+
"2013-10-26 23:00", "2013-10-27 01:00", tz="Europe/London", freq="h"
936+
)
937+
938+
times = date_range(
939+
"2013-10-26 23:00", "2013-10-27 01:00", freq="h", tz=tz, ambiguous="infer"
940+
)
941+
assert times[0] == Timestamp("2013-10-26 23:00", tz=tz)
942+
assert times[-1] == Timestamp("2013-10-27 01:00:00+0000", tz=tz)
943+
944+
@pytest.mark.parametrize(
945+
"tz, option, expected",
946+
[
947+
["US/Pacific", "shift_forward", "2019-03-10 03:00"],
948+
["dateutil/US/Pacific", "shift_forward", "2019-03-10 03:00"],
949+
["US/Pacific", "shift_backward", "2019-03-10 01:00"],
950+
["dateutil/US/Pacific", "shift_backward", "2019-03-10 01:00"],
951+
["US/Pacific", timedelta(hours=1), "2019-03-10 03:00"],
952+
],
953+
)
954+
def test_date_range_nonexistent_endpoint(self, tz, option, expected):
955+
# construction with an nonexistent end-point
956+
957+
with pytest.raises(pytz.NonExistentTimeError, match="2019-03-10 02:00:00"):
958+
date_range(
959+
"2019-03-10 00:00", "2019-03-10 02:00", tz="US/Pacific", freq="h"
960+
)
961+
962+
times = date_range(
963+
"2019-03-10 00:00", "2019-03-10 02:00", freq="h", tz=tz, nonexistent=option
964+
)
965+
assert times[-1] == Timestamp(expected, tz=tz)
966+
914967

915968
class TestGenRangeGeneration:
916969
def test_generate(self):

pandas/tests/indexes/datetimes/test_datetimelike.py

-13
This file was deleted.

pandas/tests/indexes/datetimes/test_formats.py

+62-5
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import pandas as pd
99
from pandas import (
1010
DatetimeIndex,
11+
NaT,
1112
Series,
1213
)
1314
import pandas._testing as tm
@@ -33,7 +34,7 @@ def test_get_values_for_csv():
3334
tm.assert_numpy_array_equal(result, expected)
3435

3536
# NULL object handling should work
36-
index = DatetimeIndex(["2017-01-01", pd.NaT, "2017-01-03"])
37+
index = DatetimeIndex(["2017-01-01", NaT, "2017-01-03"])
3738
expected = np.array(["2017-01-01", "NaT", "2017-01-03"], dtype=object)
3839

3940
result = index._get_values_for_csv(na_rep="NaT")
@@ -58,6 +59,20 @@ def test_get_values_for_csv():
5859

5960

6061
class TestDatetimeIndexRendering:
62+
def test_dti_repr_dates(self):
63+
text = str(pd.to_datetime([datetime(2013, 1, 1), datetime(2014, 1, 1)]))
64+
assert "['2013-01-01'," in text
65+
assert ", '2014-01-01']" in text
66+
67+
def test_dti_repr_mixed(self):
68+
text = str(
69+
pd.to_datetime(
70+
[datetime(2013, 1, 1), datetime(2014, 1, 1, 12), datetime(2014, 1, 1)]
71+
)
72+
)
73+
assert "'2013-01-01 00:00:00'," in text
74+
assert "'2014-01-01 00:00:00']" in text
75+
6176
def test_dti_repr_short(self):
6277
dr = pd.date_range(start="1/1/2012", periods=1)
6378
repr(dr)
@@ -114,11 +129,11 @@ def test_dti_representation(self, method):
114129
)
115130
idxs.append(
116131
DatetimeIndex(
117-
["2011-01-01 09:00", "2011-01-01 10:00", pd.NaT], tz="US/Eastern"
132+
["2011-01-01 09:00", "2011-01-01 10:00", NaT], tz="US/Eastern"
118133
)
119134
)
120135
idxs.append(
121-
DatetimeIndex(["2011-01-01 09:00", "2011-01-01 10:00", pd.NaT], tz="UTC")
136+
DatetimeIndex(["2011-01-01 09:00", "2011-01-01 10:00", NaT], tz="UTC")
122137
)
123138

124139
exp = []
@@ -165,7 +180,7 @@ def test_dti_representation_to_series(self):
165180
tz="Asia/Tokyo",
166181
)
167182
idx6 = DatetimeIndex(
168-
["2011-01-01 09:00", "2011-01-01 10:00", pd.NaT], tz="US/Eastern"
183+
["2011-01-01 09:00", "2011-01-01 10:00", NaT], tz="US/Eastern"
169184
)
170185
idx7 = DatetimeIndex(["2011-01-01 09:00", "2011-01-02 10:15"])
171186

@@ -222,7 +237,7 @@ def test_dti_summary(self):
222237
tz="Asia/Tokyo",
223238
)
224239
idx6 = DatetimeIndex(
225-
["2011-01-01 09:00", "2011-01-01 10:00", pd.NaT], tz="US/Eastern"
240+
["2011-01-01 09:00", "2011-01-01 10:00", NaT], tz="US/Eastern"
226241
)
227242

228243
exp1 = "DatetimeIndex: 0 entries\nFreq: D"
@@ -281,6 +296,14 @@ def test_dti_custom_business_summary_dateutil(self):
281296

282297

283298
class TestFormat:
299+
def test_format(self):
300+
# GH#35439
301+
idx = pd.date_range("20130101", periods=5)
302+
expected = [f"{x:%Y-%m-%d}" for x in idx]
303+
msg = r"DatetimeIndex\.format is deprecated"
304+
with tm.assert_produces_warning(FutureWarning, match=msg):
305+
assert idx.format() == expected
306+
284307
def test_format_with_name_time_info(self):
285308
# bug I fixed 12/20/2011
286309
dates = pd.date_range("2011-01-01 04:00:00", periods=10, name="something")
@@ -299,3 +322,37 @@ def test_format_datetime_with_time(self):
299322
expected = ["2012-02-07 00:00:00", "2012-02-07 23:00:00"]
300323
assert len(result) == 2
301324
assert result == expected
325+
326+
def test_format_datetime(self):
327+
msg = "DatetimeIndex.format is deprecated"
328+
with tm.assert_produces_warning(FutureWarning, match=msg):
329+
formatted = pd.to_datetime([datetime(2003, 1, 1, 12), NaT]).format()
330+
assert formatted[0] == "2003-01-01 12:00:00"
331+
assert formatted[1] == "NaT"
332+
333+
def test_format_date(self):
334+
msg = "DatetimeIndex.format is deprecated"
335+
with tm.assert_produces_warning(FutureWarning, match=msg):
336+
formatted = pd.to_datetime([datetime(2003, 1, 1), NaT]).format()
337+
assert formatted[0] == "2003-01-01"
338+
assert formatted[1] == "NaT"
339+
340+
def test_format_date_tz(self):
341+
dti = pd.to_datetime([datetime(2013, 1, 1)], utc=True)
342+
msg = "DatetimeIndex.format is deprecated"
343+
with tm.assert_produces_warning(FutureWarning, match=msg):
344+
formatted = dti.format()
345+
assert formatted[0] == "2013-01-01 00:00:00+00:00"
346+
347+
dti = pd.to_datetime([datetime(2013, 1, 1), NaT], utc=True)
348+
with tm.assert_produces_warning(FutureWarning, match=msg):
349+
formatted = dti.format()
350+
assert formatted[0] == "2013-01-01 00:00:00+00:00"
351+
352+
def test_format_date_explicit_date_format(self):
353+
dti = pd.to_datetime([datetime(2003, 2, 1), NaT])
354+
msg = "DatetimeIndex.format is deprecated"
355+
with tm.assert_produces_warning(FutureWarning, match=msg):
356+
formatted = dti.format(date_format="%m-%d-%Y", na_rep="UT")
357+
assert formatted[0] == "02-01-2003"
358+
assert formatted[1] == "UT"

pandas/tests/indexes/datetimes/test_setops.py

+57-9
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
from datetime import datetime
1+
from datetime import (
2+
datetime,
3+
timezone,
4+
)
25

36
import numpy as np
47
import pytest
@@ -12,6 +15,7 @@
1215
DatetimeIndex,
1316
Index,
1417
Series,
18+
Timestamp,
1519
bdate_range,
1620
date_range,
1721
)
@@ -416,6 +420,52 @@ def test_intersection_non_tick_no_fastpath(self):
416420
expected = dti[:0]
417421
tm.assert_index_equal(result, expected)
418422

423+
def test_dti_intersection(self):
424+
rng = date_range("1/1/2011", periods=100, freq="h", tz="utc")
425+
426+
left = rng[10:90][::-1]
427+
right = rng[20:80][::-1]
428+
429+
assert left.tz == rng.tz
430+
result = left.intersection(right)
431+
assert result.tz == left.tz
432+
433+
# Note: not difference, as there is no symmetry requirement there
434+
@pytest.mark.parametrize("setop", ["union", "intersection", "symmetric_difference"])
435+
def test_dti_setop_aware(self, setop):
436+
# non-overlapping
437+
# GH#39328 as of 2.0 we cast these to UTC instead of object
438+
rng = date_range("2012-11-15 00:00:00", periods=6, freq="h", tz="US/Central")
439+
440+
rng2 = date_range("2012-11-15 12:00:00", periods=6, freq="h", tz="US/Eastern")
441+
442+
result = getattr(rng, setop)(rng2)
443+
444+
left = rng.tz_convert("UTC")
445+
right = rng2.tz_convert("UTC")
446+
expected = getattr(left, setop)(right)
447+
tm.assert_index_equal(result, expected)
448+
assert result.tz == left.tz
449+
if len(result):
450+
assert result[0].tz is timezone.utc
451+
assert result[-1].tz is timezone.utc
452+
453+
def test_dti_union_mixed(self):
454+
# GH#21671
455+
rng = DatetimeIndex([Timestamp("2011-01-01"), pd.NaT])
456+
rng2 = DatetimeIndex(["2012-01-01", "2012-01-02"], tz="Asia/Tokyo")
457+
result = rng.union(rng2)
458+
expected = Index(
459+
[
460+
Timestamp("2011-01-01"),
461+
pd.NaT,
462+
Timestamp("2012-01-01", tz="Asia/Tokyo"),
463+
Timestamp("2012-01-02", tz="Asia/Tokyo"),
464+
],
465+
dtype=object,
466+
)
467+
tm.assert_index_equal(result, expected)
468+
419469

420470
class TestBusinessDatetimeIndex:
421471
def test_union(self, sort):
@@ -500,15 +550,13 @@ def test_intersection_bug(self):
500550
def test_intersection_list(self):
501551
# GH#35876
502552
# values is not an Index -> no name -> retain "a"
503-
values = [pd.Timestamp("2020-01-01"), pd.Timestamp("2020-02-01")]
553+
values = [Timestamp("2020-01-01"), Timestamp("2020-02-01")]
504554
idx = DatetimeIndex(values, name="a")
505555
res = idx.intersection(values)
506556
tm.assert_index_equal(res, idx)
507557

508558
def test_month_range_union_tz_pytz(self, sort):
509-
from pytz import timezone
510-
511-
tz = timezone("US/Eastern")
559+
tz = pytz.timezone("US/Eastern")
512560

513561
early_start = datetime(2011, 1, 1)
514562
early_end = datetime(2011, 3, 1)
@@ -543,13 +591,13 @@ def test_intersection_duplicates(self, sort):
543591
# GH#38196
544592
idx1 = Index(
545593
[
546-
pd.Timestamp("2019-12-13"),
547-
pd.Timestamp("2019-12-12"),
548-
pd.Timestamp("2019-12-12"),
594+
Timestamp("2019-12-13"),
595+
Timestamp("2019-12-12"),
596+
Timestamp("2019-12-12"),
549597
]
550598
)
551599
result = idx1.intersection(idx1, sort=sort)
552-
expected = Index([pd.Timestamp("2019-12-13"), pd.Timestamp("2019-12-12")])
600+
expected = Index([Timestamp("2019-12-13"), Timestamp("2019-12-12")])
553601
tm.assert_index_equal(result, expected)
554602

555603

0 commit comments

Comments
 (0)