spam-classifier
/
venv
/lib
/python3.11
/site-packages
/pandas
/tests
/indexes
/test_datetimelike.py
""" generic datetimelike tests """ | |
import numpy as np | |
import pytest | |
import pandas as pd | |
import pandas._testing as tm | |
class TestDatetimeLike: | |
def simple_index(self, request): | |
return request.param | |
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.copy() | |
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 = type(simple_index)(idx) | |
tm.assert_index_equal(result, idx) | |
msg = "Passing a type in .*Index.view is deprecated" | |
with tm.assert_produces_warning(FutureWarning, match=msg): | |
idx_view = idx.view(type(simple_index)) | |
result = type(simple_index)(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 + index.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) | |
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) | |
def test_diff(self, unit): | |
# GH 55080 | |
dti = pd.to_datetime([10, 20, 30], unit=unit).as_unit(unit) | |
result = dti.diff(1) | |
expected = pd.to_timedelta([pd.NaT, 10, 10], unit=unit).as_unit(unit) | |
tm.assert_index_equal(result, expected) | |