1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
""" generic datetimelike tests """
 
import numpy as np
import pytest
 
import pandas as pd
import pandas._testing as tm
from pandas.tests.indexes.common import Base
 
 
class DatetimeLike(Base):
    def test_isin(self, simple_index):
        index = simple_index[:4]
        result = index.isin(index)
        assert result.all()
 
        result = index.isin(list(index))
        assert result.all()
 
        result = index.isin([index[2], 5])
        expected = np.array([False, False, True, False])
        tm.assert_numpy_array_equal(result, expected)
 
    def test_argsort_matches_array(self, simple_index):
        idx = simple_index
        idx = idx.insert(1, pd.NaT)
 
        result = idx.argsort()
        expected = idx._data.argsort()
        tm.assert_numpy_array_equal(result, expected)
 
    def test_can_hold_identifiers(self, simple_index):
        idx = simple_index
        key = idx[0]
        assert idx._can_hold_identifiers_and_holds_name(key) is False
 
    def test_shift_identity(self, simple_index):
        idx = simple_index
        tm.assert_index_equal(idx, idx.shift(0))
 
    def test_shift_empty(self, simple_index):
        # GH#14811
        idx = simple_index[:0]
        tm.assert_index_equal(idx, idx.shift(1))
 
    def test_str(self, simple_index):
        # test the string repr
        idx = simple_index
        idx.name = "foo"
        assert f"length={len(idx)}" not in str(idx)
        assert "'foo'" in str(idx)
        assert type(idx).__name__ in str(idx)
 
        if hasattr(idx, "tz"):
            if idx.tz is not None:
                assert idx.tz in str(idx)
        if isinstance(idx, pd.PeriodIndex):
            assert f"dtype='period[{idx.freqstr}]'" in str(idx)
        else:
            assert f"freq='{idx.freqstr}'" in str(idx)
 
    def test_view(self, simple_index):
        idx = simple_index
 
        idx_view = idx.view("i8")
        result = self._index_cls(idx)
        tm.assert_index_equal(result, idx)
 
        idx_view = idx.view(self._index_cls)
        result = self._index_cls(idx)
        tm.assert_index_equal(result, idx_view)
 
    def test_map_callable(self, simple_index):
        index = simple_index
        expected = index + index.freq
        result = index.map(lambda x: x + x.freq)
        tm.assert_index_equal(result, expected)
 
        # map to NaT
        result = index.map(lambda x: pd.NaT if x == index[0] else x)
        expected = pd.Index([pd.NaT] + index[1:].tolist())
        tm.assert_index_equal(result, expected)
 
    @pytest.mark.parametrize(
        "mapper",
        [
            lambda values, index: {i: e for e, i in zip(values, index)},
            lambda values, index: pd.Series(values, index, dtype=object),
        ],
    )
    def test_map_dictlike(self, mapper, simple_index):
        index = simple_index
        expected = index + index.freq
 
        # don't compare the freqs
        if isinstance(expected, (pd.DatetimeIndex, pd.TimedeltaIndex)):
            expected = expected._with_freq(None)
 
        result = index.map(mapper(expected, index))
        tm.assert_index_equal(result, expected)
 
        expected = pd.Index([pd.NaT] + index[1:].tolist())
        result = index.map(mapper(expected, index))
        tm.assert_index_equal(result, expected)
 
        # empty map; these map to np.nan because we cannot know
        # to re-infer things
        expected = pd.Index([np.nan] * len(index))
        result = index.map(mapper([], []))
        tm.assert_index_equal(result, expected)
 
    def test_getitem_preserves_freq(self, simple_index):
        index = simple_index
        assert index.freq is not None
 
        result = index[:]
        assert result.freq == index.freq
 
    def test_where_cast_str(self, simple_index):
        index = simple_index
 
        mask = np.ones(len(index), dtype=bool)
        mask[-1] = False
 
        result = index.where(mask, str(index[0]))
        expected = index.where(mask, index[0])
        tm.assert_index_equal(result, expected)
 
        result = index.where(mask, [str(index[0])])
        tm.assert_index_equal(result, expected)
 
        expected = index.astype(object).where(mask, "foo")
        result = index.where(mask, "foo")
        tm.assert_index_equal(result, expected)
 
        result = index.where(mask, ["foo"])
        tm.assert_index_equal(result, expected)