def test_shift(self): # https://github.com/pandas-dev/pandas/issues/31495, GH#22428, GH#31502 a = IntervalArray.from_breaks([1, 2, 3]) result = a.shift() # int -> float expected = IntervalArray.from_tuples([(np.nan, np.nan), (1.0, 2.0)]) tm.assert_interval_array_equal(result, expected)
def test_shift_datetime(self): a = IntervalArray.from_breaks(pd.date_range("2000", periods=4)) result = a.shift(2) expected = a.take([-1, -1, 0], allow_fill=True) tm.assert_interval_array_equal(result, expected) result = a.shift(-1) expected = a.take([1, 2, -1], allow_fill=True) tm.assert_interval_array_equal(result, expected)
def test_interval_array_equal_start_mismatch(): kwargs = dict(periods=4) arr1 = interval_range(start=0, **kwargs).values arr2 = interval_range(start=1, **kwargs).values msg = """\ IntervalArray.left are different IntervalArray.left values are different \\(100.0 %\\) \\[left\\]: Int64Index\\(\\[0, 1, 2, 3\\], dtype='int64'\\) \\[right\\]: Int64Index\\(\\[1, 2, 3, 4\\], dtype='int64'\\)""" with pytest.raises(AssertionError, match=msg): tm.assert_interval_array_equal(arr1, arr2)
def test_interval_array_equal_periods_mismatch(): kwargs = dict(start=0) arr1 = interval_range(periods=5, **kwargs).values arr2 = interval_range(periods=6, **kwargs).values msg = """\ IntervalArray.left are different IntervalArray.left length are different \\[left\\]: 5, Int64Index\\(\\[0, 1, 2, 3, 4\\], dtype='int64'\\) \\[right\\]: 6, Int64Index\\(\\[0, 1, 2, 3, 4, 5\\], dtype='int64'\\)""" with pytest.raises(AssertionError, match=msg): tm.assert_interval_array_equal(arr1, arr2)
def test_interval_array_equal_end_mismatch(): kwargs = dict(start=0, periods=5) arr1 = interval_range(end=10, **kwargs).values arr2 = interval_range(end=20, **kwargs).values msg = """\ IntervalArray.left are different IntervalArray.left values are different \\(80.0 %\\) \\[left\\]: Int64Index\\(\\[0, 2, 4, 6, 8\\], dtype='int64'\\) \\[right\\]: Int64Index\\(\\[0, 4, 8, 12, 16\\], dtype='int64'\\)""" with pytest.raises(AssertionError, match=msg): tm.assert_interval_array_equal(arr1, arr2)
def test_interval_array_equal_start_mismatch(): kwargs = {"periods": 4} arr1 = interval_range(start=0, **kwargs).values arr2 = interval_range(start=1, **kwargs).values msg = """\ IntervalArray.left are different IntervalArray.left values are different \\(100.0 %\\) \\[left\\]: \\[0, 1, 2, 3\\] \\[right\\]: \\[1, 2, 3, 4\\]""" with pytest.raises(AssertionError, match=msg): tm.assert_interval_array_equal(arr1, arr2)
def test_interval_array_equal_closed_mismatch(): kwargs = dict(start=0, periods=5) arr1 = interval_range(closed="left", **kwargs).values arr2 = interval_range(closed="right", **kwargs).values msg = """\ IntervalArray are different Attribute "closed" are different \\[left\\]: left \\[right\\]: right""" with pytest.raises(AssertionError, match=msg): tm.assert_interval_array_equal(arr1, arr2)
def test_interval_array_equal_end_mismatch(): kwargs = {"start": 0, "periods": 5} arr1 = interval_range(end=10, **kwargs).values arr2 = interval_range(end=20, **kwargs).values msg = """\ IntervalArray.left are different IntervalArray.left values are different \\(80.0 %\\) \\[left\\]: \\[0, 2, 4, 6, 8\\] \\[right\\]: \\[0, 4, 8, 12, 16\\]""" with pytest.raises(AssertionError, match=msg): tm.assert_interval_array_equal(arr1, arr2)
def test_interval_array_equal_periods_mismatch(): kwargs = {"start": 0} arr1 = interval_range(periods=5, **kwargs).values arr2 = interval_range(periods=6, **kwargs).values msg = """\ IntervalArray.left are different IntervalArray.left shapes are different \\[left\\]: \\(5,\\) \\[right\\]: \\(6,\\)""" with pytest.raises(AssertionError, match=msg): tm.assert_interval_array_equal(arr1, arr2)
def test_interval_array_equal_closed_mismatch(): kwargs = {"start": 0, "periods": 5} arr1 = interval_range(inclusive="left", **kwargs).values arr2 = interval_range(inclusive="right", **kwargs).values msg = """\ IntervalArray are different Attribute "inclusive" are different \\[left\\]: left \\[right\\]: right""" with pytest.raises(AssertionError, match=msg): tm.assert_interval_array_equal(arr1, arr2)
def test_tz_unique(self): # GH 46128 dti1 = date_range("2016-01-01", periods=3) ii1 = IntervalIndex.from_breaks(dti1) ser1 = Series(ii1) uni1 = ser1.unique() tm.assert_interval_array_equal(ser1.array, uni1) dti2 = date_range("2016-01-01", periods=3, tz="US/Eastern") ii2 = IntervalIndex.from_breaks(dti2) ser2 = Series(ii2) uni2 = ser2.unique() tm.assert_interval_array_equal(ser2.array, uni2) assert uni1.dtype != uni2.dtype
def test_setitem_mismatched_closed(self): arr = IntervalArray.from_breaks(range(4)) orig = arr.copy() other = arr.set_closed("both") msg = "'value.closed' is 'both', expected 'right'" with pytest.raises(ValueError, match=msg): arr[0] = other[0] with pytest.raises(ValueError, match=msg): arr[:1] = other[:1] with pytest.raises(ValueError, match=msg): arr[:0] = other[:0] with pytest.raises(ValueError, match=msg): arr[:] = other[::-1] with pytest.raises(ValueError, match=msg): arr[:] = list(other[::-1]) with pytest.raises(ValueError, match=msg): arr[:] = other[::-1].astype(object) with pytest.raises(ValueError, match=msg): arr[:] = other[::-1].astype("category") # empty list should be no-op arr[:0] = [] tm.assert_interval_array_equal(arr, orig)
def test_interval_array_equal(kwargs): arr = interval_range(**kwargs).values tm.assert_interval_array_equal(arr, arr)