123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- """
- Tests shared for DatetimeIndex/TimedeltaIndex/PeriodIndex
- """
- from datetime import (
- datetime,
- timedelta,
- )
- import numpy as np
- import pytest
- import pandas as pd
- from pandas import (
- CategoricalIndex,
- DatetimeIndex,
- Index,
- PeriodIndex,
- TimedeltaIndex,
- date_range,
- period_range,
- )
- import pandas._testing as tm
- class EqualsTests:
- def test_not_equals_numeric(self, index):
- assert not index.equals(Index(index.asi8))
- assert not index.equals(Index(index.asi8.astype("u8")))
- assert not index.equals(Index(index.asi8).astype("f8"))
- def test_equals(self, index):
- assert index.equals(index)
- assert index.equals(index.astype(object))
- assert index.equals(CategoricalIndex(index))
- assert index.equals(CategoricalIndex(index.astype(object)))
- def test_not_equals_non_arraylike(self, index):
- assert not index.equals(list(index))
- def test_not_equals_strings(self, index):
- other = Index([str(x) for x in index], dtype=object)
- assert not index.equals(other)
- assert not index.equals(CategoricalIndex(other))
- def test_not_equals_misc_strs(self, index):
- other = Index(list("abc"))
- assert not index.equals(other)
- class TestPeriodIndexEquals(EqualsTests):
- @pytest.fixture
- def index(self):
- return period_range("2013-01-01", periods=5, freq="D")
- # TODO: de-duplicate with other test_equals2 methods
- @pytest.mark.parametrize("freq", ["D", "M"])
- def test_equals2(self, freq):
- # GH#13107
- idx = PeriodIndex(["2011-01-01", "2011-01-02", "NaT"], freq=freq)
- assert idx.equals(idx)
- assert idx.equals(idx.copy())
- assert idx.equals(idx.astype(object))
- assert idx.astype(object).equals(idx)
- assert idx.astype(object).equals(idx.astype(object))
- assert not idx.equals(list(idx))
- assert not idx.equals(pd.Series(idx))
- idx2 = PeriodIndex(["2011-01-01", "2011-01-02", "NaT"], freq="H")
- assert not idx.equals(idx2)
- assert not idx.equals(idx2.copy())
- assert not idx.equals(idx2.astype(object))
- assert not idx.astype(object).equals(idx2)
- assert not idx.equals(list(idx2))
- assert not idx.equals(pd.Series(idx2))
- # same internal, different tz
- idx3 = PeriodIndex._simple_new(
- idx._values._simple_new(idx._values.asi8, freq="H")
- )
- tm.assert_numpy_array_equal(idx.asi8, idx3.asi8)
- assert not idx.equals(idx3)
- assert not idx.equals(idx3.copy())
- assert not idx.equals(idx3.astype(object))
- assert not idx.astype(object).equals(idx3)
- assert not idx.equals(list(idx3))
- assert not idx.equals(pd.Series(idx3))
- class TestDatetimeIndexEquals(EqualsTests):
- @pytest.fixture
- def index(self):
- return date_range("2013-01-01", periods=5)
- def test_equals2(self):
- # GH#13107
- idx = DatetimeIndex(["2011-01-01", "2011-01-02", "NaT"])
- assert idx.equals(idx)
- assert idx.equals(idx.copy())
- assert idx.equals(idx.astype(object))
- assert idx.astype(object).equals(idx)
- assert idx.astype(object).equals(idx.astype(object))
- assert not idx.equals(list(idx))
- assert not idx.equals(pd.Series(idx))
- idx2 = DatetimeIndex(["2011-01-01", "2011-01-02", "NaT"], tz="US/Pacific")
- assert not idx.equals(idx2)
- assert not idx.equals(idx2.copy())
- assert not idx.equals(idx2.astype(object))
- assert not idx.astype(object).equals(idx2)
- assert not idx.equals(list(idx2))
- assert not idx.equals(pd.Series(idx2))
- # same internal, different tz
- idx3 = DatetimeIndex(idx.asi8, tz="US/Pacific")
- tm.assert_numpy_array_equal(idx.asi8, idx3.asi8)
- assert not idx.equals(idx3)
- assert not idx.equals(idx3.copy())
- assert not idx.equals(idx3.astype(object))
- assert not idx.astype(object).equals(idx3)
- assert not idx.equals(list(idx3))
- assert not idx.equals(pd.Series(idx3))
- # check that we do not raise when comparing with OutOfBounds objects
- oob = Index([datetime(2500, 1, 1)] * 3, dtype=object)
- assert not idx.equals(oob)
- assert not idx2.equals(oob)
- assert not idx3.equals(oob)
- # check that we do not raise when comparing with OutOfBounds dt64
- oob2 = oob.map(np.datetime64)
- assert not idx.equals(oob2)
- assert not idx2.equals(oob2)
- assert not idx3.equals(oob2)
- @pytest.mark.parametrize("freq", ["B", "C"])
- def test_not_equals_bday(self, freq):
- rng = date_range("2009-01-01", "2010-01-01", freq=freq)
- assert not rng.equals(list(rng))
- class TestTimedeltaIndexEquals(EqualsTests):
- @pytest.fixture
- def index(self):
- return tm.makeTimedeltaIndex(10)
- def test_equals2(self):
- # GH#13107
- idx = TimedeltaIndex(["1 days", "2 days", "NaT"])
- assert idx.equals(idx)
- assert idx.equals(idx.copy())
- assert idx.equals(idx.astype(object))
- assert idx.astype(object).equals(idx)
- assert idx.astype(object).equals(idx.astype(object))
- assert not idx.equals(list(idx))
- assert not idx.equals(pd.Series(idx))
- idx2 = TimedeltaIndex(["2 days", "1 days", "NaT"])
- assert not idx.equals(idx2)
- assert not idx.equals(idx2.copy())
- assert not idx.equals(idx2.astype(object))
- assert not idx.astype(object).equals(idx2)
- assert not idx.astype(object).equals(idx2.astype(object))
- assert not idx.equals(list(idx2))
- assert not idx.equals(pd.Series(idx2))
- # Check that we dont raise OverflowError on comparisons outside the
- # implementation range GH#28532
- oob = Index([timedelta(days=10**6)] * 3, dtype=object)
- assert not idx.equals(oob)
- assert not idx2.equals(oob)
- oob2 = Index([np.timedelta64(x) for x in oob], dtype=object)
- assert (oob == oob2).all()
- assert not idx.equals(oob2)
- assert not idx2.equals(oob2)
- oob3 = oob.map(np.timedelta64)
- assert (oob3 == oob).all()
- assert not idx.equals(oob3)
- assert not idx2.equals(oob3)
|