Skip to content

Commit c8ab4dd

Browse files
jbrockmendelluckyvs1
authored andcommitted
TST/REF: collect datetimelike factorize tests (pandas-dev#38573)
1 parent c3a9d59 commit c8ab4dd

File tree

5 files changed

+138
-126
lines changed

5 files changed

+138
-126
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
import numpy as np
2+
3+
from pandas import DatetimeIndex, Index, date_range, factorize
4+
import pandas._testing as tm
5+
6+
7+
class TestDatetimeIndexFactorize:
8+
def test_factorize(self):
9+
idx1 = DatetimeIndex(
10+
["2014-01", "2014-01", "2014-02", "2014-02", "2014-03", "2014-03"]
11+
)
12+
13+
exp_arr = np.array([0, 0, 1, 1, 2, 2], dtype=np.intp)
14+
exp_idx = DatetimeIndex(["2014-01", "2014-02", "2014-03"])
15+
16+
arr, idx = idx1.factorize()
17+
tm.assert_numpy_array_equal(arr, exp_arr)
18+
tm.assert_index_equal(idx, exp_idx)
19+
assert idx.freq == exp_idx.freq
20+
21+
arr, idx = idx1.factorize(sort=True)
22+
tm.assert_numpy_array_equal(arr, exp_arr)
23+
tm.assert_index_equal(idx, exp_idx)
24+
assert idx.freq == exp_idx.freq
25+
26+
# tz must be preserved
27+
idx1 = idx1.tz_localize("Asia/Tokyo")
28+
exp_idx = exp_idx.tz_localize("Asia/Tokyo")
29+
30+
arr, idx = idx1.factorize()
31+
tm.assert_numpy_array_equal(arr, exp_arr)
32+
tm.assert_index_equal(idx, exp_idx)
33+
assert idx.freq == exp_idx.freq
34+
35+
idx2 = DatetimeIndex(
36+
["2014-03", "2014-03", "2014-02", "2014-01", "2014-03", "2014-01"]
37+
)
38+
39+
exp_arr = np.array([2, 2, 1, 0, 2, 0], dtype=np.intp)
40+
exp_idx = DatetimeIndex(["2014-01", "2014-02", "2014-03"])
41+
arr, idx = idx2.factorize(sort=True)
42+
tm.assert_numpy_array_equal(arr, exp_arr)
43+
tm.assert_index_equal(idx, exp_idx)
44+
assert idx.freq == exp_idx.freq
45+
46+
exp_arr = np.array([0, 0, 1, 2, 0, 2], dtype=np.intp)
47+
exp_idx = DatetimeIndex(["2014-03", "2014-02", "2014-01"])
48+
arr, idx = idx2.factorize()
49+
tm.assert_numpy_array_equal(arr, exp_arr)
50+
tm.assert_index_equal(idx, exp_idx)
51+
assert idx.freq == exp_idx.freq
52+
53+
def test_factorize_preserves_freq(self):
54+
# GH#38120 freq should be preserved
55+
idx3 = date_range("2000-01", periods=4, freq="M", tz="Asia/Tokyo")
56+
exp_arr = np.array([0, 1, 2, 3], dtype=np.intp)
57+
58+
arr, idx = idx3.factorize()
59+
tm.assert_numpy_array_equal(arr, exp_arr)
60+
tm.assert_index_equal(idx, idx3)
61+
assert idx.freq == idx3.freq
62+
63+
arr, idx = factorize(idx3)
64+
tm.assert_numpy_array_equal(arr, exp_arr)
65+
tm.assert_index_equal(idx, idx3)
66+
assert idx.freq == idx3.freq
67+
68+
def test_factorize_tz(self, tz_naive_fixture, index_or_series):
69+
tz = tz_naive_fixture
70+
# GH#13750
71+
base = date_range("2016-11-05", freq="H", periods=100, tz=tz)
72+
idx = base.repeat(5)
73+
74+
exp_arr = np.arange(100, dtype=np.intp).repeat(5)
75+
76+
obj = index_or_series(idx)
77+
78+
arr, res = obj.factorize()
79+
tm.assert_numpy_array_equal(arr, exp_arr)
80+
expected = base._with_freq(None)
81+
tm.assert_index_equal(res, expected)
82+
assert res.freq == expected.freq
83+
84+
def test_factorize_dst(self, index_or_series):
85+
# GH#13750
86+
idx = date_range("2016-11-06", freq="H", periods=12, tz="US/Eastern")
87+
obj = index_or_series(idx)
88+
89+
arr, res = obj.factorize()
90+
tm.assert_numpy_array_equal(arr, np.arange(12, dtype=np.intp))
91+
tm.assert_index_equal(res, idx)
92+
if index_or_series is Index:
93+
assert res.freq == idx.freq
94+
95+
idx = date_range("2016-06-13", freq="H", periods=12, tz="US/Eastern")
96+
obj = index_or_series(idx)
97+
98+
arr, res = obj.factorize()
99+
tm.assert_numpy_array_equal(arr, np.arange(12, dtype=np.intp))
100+
tm.assert_index_equal(res, idx)
101+
if index_or_series is Index:
102+
assert res.freq == idx.freq

pandas/tests/indexes/datetimes/test_datetime.py

-96
Original file line numberDiff line numberDiff line change
@@ -198,102 +198,6 @@ def test_ns_index(self):
198198
new_index = date_range(start=index[0], end=index[-1], freq=index.freq)
199199
self.assert_index_parameters(new_index)
200200

201-
def test_factorize(self):
202-
idx1 = DatetimeIndex(
203-
["2014-01", "2014-01", "2014-02", "2014-02", "2014-03", "2014-03"]
204-
)
205-
206-
exp_arr = np.array([0, 0, 1, 1, 2, 2], dtype=np.intp)
207-
exp_idx = DatetimeIndex(["2014-01", "2014-02", "2014-03"])
208-
209-
arr, idx = idx1.factorize()
210-
tm.assert_numpy_array_equal(arr, exp_arr)
211-
tm.assert_index_equal(idx, exp_idx)
212-
assert idx.freq == exp_idx.freq
213-
214-
arr, idx = idx1.factorize(sort=True)
215-
tm.assert_numpy_array_equal(arr, exp_arr)
216-
tm.assert_index_equal(idx, exp_idx)
217-
assert idx.freq == exp_idx.freq
218-
219-
# tz must be preserved
220-
idx1 = idx1.tz_localize("Asia/Tokyo")
221-
exp_idx = exp_idx.tz_localize("Asia/Tokyo")
222-
223-
arr, idx = idx1.factorize()
224-
tm.assert_numpy_array_equal(arr, exp_arr)
225-
tm.assert_index_equal(idx, exp_idx)
226-
assert idx.freq == exp_idx.freq
227-
228-
idx2 = DatetimeIndex(
229-
["2014-03", "2014-03", "2014-02", "2014-01", "2014-03", "2014-01"]
230-
)
231-
232-
exp_arr = np.array([2, 2, 1, 0, 2, 0], dtype=np.intp)
233-
exp_idx = DatetimeIndex(["2014-01", "2014-02", "2014-03"])
234-
arr, idx = idx2.factorize(sort=True)
235-
tm.assert_numpy_array_equal(arr, exp_arr)
236-
tm.assert_index_equal(idx, exp_idx)
237-
assert idx.freq == exp_idx.freq
238-
239-
exp_arr = np.array([0, 0, 1, 2, 0, 2], dtype=np.intp)
240-
exp_idx = DatetimeIndex(["2014-03", "2014-02", "2014-01"])
241-
arr, idx = idx2.factorize()
242-
tm.assert_numpy_array_equal(arr, exp_arr)
243-
tm.assert_index_equal(idx, exp_idx)
244-
assert idx.freq == exp_idx.freq
245-
246-
def test_factorize_preserves_freq(self):
247-
# GH#38120 freq should be preserved
248-
idx3 = date_range("2000-01", periods=4, freq="M", tz="Asia/Tokyo")
249-
exp_arr = np.array([0, 1, 2, 3], dtype=np.intp)
250-
251-
arr, idx = idx3.factorize()
252-
tm.assert_numpy_array_equal(arr, exp_arr)
253-
tm.assert_index_equal(idx, idx3)
254-
assert idx.freq == idx3.freq
255-
256-
arr, idx = pd.factorize(idx3)
257-
tm.assert_numpy_array_equal(arr, exp_arr)
258-
tm.assert_index_equal(idx, idx3)
259-
assert idx.freq == idx3.freq
260-
261-
def test_factorize_tz(self, tz_naive_fixture, index_or_series):
262-
tz = tz_naive_fixture
263-
# GH#13750
264-
base = date_range("2016-11-05", freq="H", periods=100, tz=tz)
265-
idx = base.repeat(5)
266-
267-
exp_arr = np.arange(100, dtype=np.intp).repeat(5)
268-
269-
obj = index_or_series(idx)
270-
271-
arr, res = obj.factorize()
272-
tm.assert_numpy_array_equal(arr, exp_arr)
273-
expected = base._with_freq(None)
274-
tm.assert_index_equal(res, expected)
275-
assert res.freq == expected.freq
276-
277-
def test_factorize_dst(self, index_or_series):
278-
# GH 13750
279-
idx = date_range("2016-11-06", freq="H", periods=12, tz="US/Eastern")
280-
obj = index_or_series(idx)
281-
282-
arr, res = obj.factorize()
283-
tm.assert_numpy_array_equal(arr, np.arange(12, dtype=np.intp))
284-
tm.assert_index_equal(res, idx)
285-
if index_or_series is Index:
286-
assert res.freq == idx.freq
287-
288-
idx = date_range("2016-06-13", freq="H", periods=12, tz="US/Eastern")
289-
obj = index_or_series(idx)
290-
291-
arr, res = obj.factorize()
292-
tm.assert_numpy_array_equal(arr, np.arange(12, dtype=np.intp))
293-
tm.assert_index_equal(res, idx)
294-
if index_or_series is Index:
295-
assert res.freq == idx.freq
296-
297201
@pytest.mark.parametrize(
298202
"arr, expected",
299203
[
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import numpy as np
2+
3+
from pandas import TimedeltaIndex, factorize, timedelta_range
4+
import pandas._testing as tm
5+
6+
7+
class TestTimedeltaIndexFactorize:
8+
def test_factorize(self):
9+
idx1 = TimedeltaIndex(["1 day", "1 day", "2 day", "2 day", "3 day", "3 day"])
10+
11+
exp_arr = np.array([0, 0, 1, 1, 2, 2], dtype=np.intp)
12+
exp_idx = TimedeltaIndex(["1 day", "2 day", "3 day"])
13+
14+
arr, idx = idx1.factorize()
15+
tm.assert_numpy_array_equal(arr, exp_arr)
16+
tm.assert_index_equal(idx, exp_idx)
17+
assert idx.freq == exp_idx.freq
18+
19+
arr, idx = idx1.factorize(sort=True)
20+
tm.assert_numpy_array_equal(arr, exp_arr)
21+
tm.assert_index_equal(idx, exp_idx)
22+
assert idx.freq == exp_idx.freq
23+
24+
def test_factorize_preserves_freq(self):
25+
# GH#38120 freq should be preserved
26+
idx3 = timedelta_range("1 day", periods=4, freq="s")
27+
exp_arr = np.array([0, 1, 2, 3], dtype=np.intp)
28+
arr, idx = idx3.factorize()
29+
tm.assert_numpy_array_equal(arr, exp_arr)
30+
tm.assert_index_equal(idx, idx3)
31+
assert idx.freq == idx3.freq
32+
33+
arr, idx = factorize(idx3)
34+
tm.assert_numpy_array_equal(arr, exp_arr)
35+
tm.assert_index_equal(idx, idx3)
36+
assert idx.freq == idx3.freq

pandas/tests/indexes/timedeltas/test_timedelta.py

-30
Original file line numberDiff line numberDiff line change
@@ -65,36 +65,6 @@ def test_isin(self):
6565
index.isin([index[2], 5]), np.array([False, False, True, False])
6666
)
6767

68-
def test_factorize(self):
69-
idx1 = TimedeltaIndex(["1 day", "1 day", "2 day", "2 day", "3 day", "3 day"])
70-
71-
exp_arr = np.array([0, 0, 1, 1, 2, 2], dtype=np.intp)
72-
exp_idx = TimedeltaIndex(["1 day", "2 day", "3 day"])
73-
74-
arr, idx = idx1.factorize()
75-
tm.assert_numpy_array_equal(arr, exp_arr)
76-
tm.assert_index_equal(idx, exp_idx)
77-
assert idx.freq == exp_idx.freq
78-
79-
arr, idx = idx1.factorize(sort=True)
80-
tm.assert_numpy_array_equal(arr, exp_arr)
81-
tm.assert_index_equal(idx, exp_idx)
82-
assert idx.freq == exp_idx.freq
83-
84-
def test_factorize_preserves_freq(self):
85-
# GH#38120 freq should be preserved
86-
idx3 = timedelta_range("1 day", periods=4, freq="s")
87-
exp_arr = np.array([0, 1, 2, 3], dtype=np.intp)
88-
arr, idx = idx3.factorize()
89-
tm.assert_numpy_array_equal(arr, exp_arr)
90-
tm.assert_index_equal(idx, idx3)
91-
assert idx.freq == idx3.freq
92-
93-
arr, idx = pd.factorize(idx3)
94-
tm.assert_numpy_array_equal(arr, exp_arr)
95-
tm.assert_index_equal(idx, idx3)
96-
assert idx.freq == idx3.freq
97-
9868
def test_sort_values(self):
9969

10070
idx = TimedeltaIndex(["4d", "1d", "2d"])

0 commit comments

Comments
 (0)