@@ -152,6 +152,17 @@ def test_interval() -> None:
152152 bool ,
153153 )
154154
155+
156+ def test_interval_math () -> None :
157+ interval_i = pd .Interval (0 , 1 , closed = "left" )
158+ interval_f = pd .Interval (0.0 , 1.0 , closed = "right" )
159+ interval_ts = pd .Interval (
160+ pd .Timestamp ("2017-01-01" ), pd .Timestamp ("2017-01-02" ), closed = "both"
161+ )
162+ interval_td = pd .Interval (
163+ pd .Timedelta ("1 days" ), pd .Timedelta ("2 days" ), closed = "neither"
164+ )
165+
155166 check (assert_type (interval_i * 3 , "pd.Interval[int]" ), pd .Interval , int )
156167 check (assert_type (interval_f * 3 , "pd.Interval[float]" ), pd .Interval , float )
157168 check (
@@ -216,6 +227,7 @@ def test_interval() -> None:
216227 pd .Timedelta ,
217228 )
218229
230+ # Subtraction
219231 check (assert_type (interval_i - 1 , "pd.Interval[int]" ), pd .Interval , int )
220232 check (assert_type (interval_f - 1 , "pd.Interval[float]" ), pd .Interval , float )
221233 check (
@@ -240,39 +252,66 @@ def test_interval() -> None:
240252 pd .Interval ,
241253 )
242254
255+ # Addition
243256 check (assert_type (interval_i + 1 , "pd.Interval[int]" ), pd .Interval )
257+ check (assert_type (1 + interval_i , "pd.Interval[int]" ), pd .Interval )
244258 check (assert_type (interval_f + 1 , "pd.Interval[float]" ), pd .Interval )
259+ check (assert_type (1 + interval_f , "pd.Interval[float]" ), pd .Interval )
245260 check (
246261 assert_type (interval_ts + pd .Timedelta (days = 1 ), "pd.Interval[pd.Timestamp]" ),
247262 pd .Interval ,
248263 )
264+ check (
265+ assert_type (pd .Timedelta (days = 1 ) + interval_ts , "pd.Interval[pd.Timestamp]" ),
266+ pd .Interval ,
267+ )
249268 check (
250269 assert_type (interval_td + pd .Timedelta (days = 1 ), "pd.Interval[pd.Timedelta]" ),
251270 pd .Interval ,
252271 )
272+ check (
273+ assert_type (pd .Timedelta (days = 1 ) + interval_td , "pd.Interval[pd.Timedelta]" ),
274+ pd .Interval ,
275+ )
253276
254277 check (assert_type (interval_i + 1.5 , "pd.Interval[float]" ), pd .Interval )
278+ check (assert_type (1.5 + interval_i , "pd.Interval[float]" ), pd .Interval )
255279 check (assert_type (interval_f + 1.5 , "pd.Interval[float]" ), pd .Interval )
280+ check (assert_type (1.5 + interval_f , "pd.Interval[float]" ), pd .Interval )
256281 check (
257282 assert_type (interval_ts + pd .Timedelta (days = 1 ), "pd.Interval[pd.Timestamp]" ),
258283 pd .Interval ,
259284 )
285+ check (
286+ assert_type (pd .Timedelta (days = 1 ) + interval_ts , "pd.Interval[pd.Timestamp]" ),
287+ pd .Interval ,
288+ )
260289 check (
261290 assert_type (interval_td + pd .Timedelta (days = 1 ), "pd.Interval[pd.Timedelta]" ),
262291 pd .Interval ,
263292 )
293+ check (
294+ assert_type (pd .Timedelta (days = 1 ) + interval_td , "pd.Interval[pd.Timedelta]" ),
295+ pd .Interval ,
296+ )
297+
298+
299+ def test_interval_cmp ():
300+ interval_i = pd .Interval (0 , 1 , closed = "left" )
301+ interval_f = pd .Interval (0.0 , 1.0 , closed = "right" )
302+ interval_ts = pd .Interval (
303+ pd .Timestamp ("2017-01-01" ), pd .Timestamp ("2017-01-02" ), closed = "both"
304+ )
305+ interval_td = pd .Interval (
306+ pd .Timedelta ("1 days" ), pd .Timedelta ("2 days" ), closed = "neither"
307+ )
264308
265309 check (assert_type (0.5 in interval_i , bool ), bool )
266310 check (assert_type (1 in interval_i , bool ), bool )
267311 check (assert_type (1 in interval_f , bool ), bool )
268312 check (assert_type (pd .Timestamp ("2000-1-1" ) in interval_ts , bool ), bool )
269313 check (assert_type (pd .Timedelta (days = 1 ) in interval_td , bool ), bool )
270314
271- check (assert_type (hash (interval_i ), int ), int )
272- check (assert_type (hash (interval_f ), int ), int )
273- check (assert_type (hash (interval_ts ), int ), int )
274- check (assert_type (hash (interval_td ), int ), int )
275-
276315 interval_index_int = pd .IntervalIndex ([interval_i ])
277316 check (
278317 assert_type (interval_index_int >= interval_i , np_ndarray_bool ),
0 commit comments