Skip to content

Commit d5be455

Browse files
authored
IntervalIndex/IntervalArray __repr__ remove redundant closed (#39085)
1 parent 413eba4 commit d5be455

File tree

3 files changed

+17
-37
lines changed

3 files changed

+17
-37
lines changed

pandas/core/arrays/interval.py

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@
149149
>>> pd.arrays.IntervalArray([pd.Interval(0, 1), pd.Interval(1, 5)])
150150
<IntervalArray>
151151
[(0, 1], (1, 5]]
152-
Length: 2, closed: right, dtype: interval[int64, right]
152+
Length: 2, dtype: interval[int64, right]
153153
154154
It may also be constructed using one of the constructor
155155
methods: :meth:`IntervalArray.from_arrays`,
@@ -354,7 +354,7 @@ def _from_factorized(cls, values, original):
354354
>>> pd.arrays.IntervalArray.from_breaks([0, 1, 2, 3])
355355
<IntervalArray>
356356
[(0, 1], (1, 2], (2, 3]]
357-
Length: 3, closed: right, dtype: interval[int64, right]
357+
Length: 3, dtype: interval[int64, right]
358358
"""
359359
),
360360
}
@@ -425,7 +425,7 @@ def from_breaks(
425425
>>> pd.arrays.IntervalArray.from_arrays([0, 1, 2], [1, 2, 3])
426426
<IntervalArray>
427427
[(0, 1], (1, 2], (2, 3]]
428-
Length: 3, closed: right, dtype: interval[int64, right]
428+
Length: 3, dtype: interval[int64, right]
429429
"""
430430
),
431431
}
@@ -484,7 +484,7 @@ def from_arrays(
484484
>>> pd.arrays.IntervalArray.from_tuples([(0, 1), (1, 2)])
485485
<IntervalArray>
486486
[(0, 1], (1, 2]]
487-
Length: 2, closed: right, dtype: interval[int64, right]
487+
Length: 2, dtype: interval[int64, right]
488488
"""
489489
),
490490
}
@@ -1071,11 +1071,7 @@ def __repr__(self) -> str:
10711071
data = self._format_data()
10721072
class_name = f"<{type(self).__name__}>\n"
10731073

1074-
template = (
1075-
f"{class_name}"
1076-
f"{data}\n"
1077-
f"Length: {len(self)}, closed: {self.closed}, dtype: {self.dtype}"
1078-
)
1074+
template = f"{class_name}{data}\nLength: {len(self)}, dtype: {self.dtype}"
10791075
return template
10801076

10811077
def _format_space(self):
@@ -1185,7 +1181,7 @@ def mid(self):
11851181
>>> intervals
11861182
<IntervalArray>
11871183
[(0, 1], (1, 3], (2, 4]]
1188-
Length: 3, closed: right, dtype: interval[int64, right]
1184+
Length: 3, dtype: interval[int64, right]
11891185
"""
11901186
),
11911187
}
@@ -1249,11 +1245,11 @@ def closed(self):
12491245
>>> index
12501246
<IntervalArray>
12511247
[(0, 1], (1, 2], (2, 3]]
1252-
Length: 3, closed: right, dtype: interval[int64, right]
1248+
Length: 3, dtype: interval[int64, right]
12531249
>>> index.set_closed('both')
12541250
<IntervalArray>
12551251
[[0, 1], [1, 2], [2, 3]]
1256-
Length: 3, closed: both, dtype: interval[int64, both]
1252+
Length: 3, dtype: interval[int64, both]
12571253
"""
12581254
),
12591255
}
@@ -1452,7 +1448,7 @@ def repeat(self, repeats, axis=None):
14521448
>>> intervals
14531449
<IntervalArray>
14541450
[(0, 1], (1, 3], (2, 4]]
1455-
Length: 3, closed: right, dtype: interval[int64, right]
1451+
Length: 3, dtype: interval[int64, right]
14561452
"""
14571453
),
14581454
}

pandas/core/indexes/interval.py

Lines changed: 7 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@
5151
default_pprint,
5252
ensure_index,
5353
maybe_extract_name,
54-
unpack_nested_dtype,
5554
)
5655
from pandas.core.indexes.datetimes import DatetimeIndex, date_range
5756
from pandas.core.indexes.extension import ExtensionIndex, inherit_names
@@ -157,7 +156,6 @@ def wrapped(self, other, sort=False):
157156
158157
>>> pd.interval_range(start=0, end=5)
159158
IntervalIndex([(0, 1], (1, 2], (2, 3], (3, 4], (4, 5]],
160-
closed='right',
161159
dtype='interval[int64, right]')
162160
163161
It may also be constructed using one of the constructor
@@ -242,7 +240,6 @@ def _simple_new(cls, array: IntervalArray, name: Label = None):
242240
--------
243241
>>> pd.IntervalIndex.from_breaks([0, 1, 2, 3])
244242
IntervalIndex([(0, 1], (1, 2], (2, 3]],
245-
closed='right',
246243
dtype='interval[int64, right]')
247244
"""
248245
),
@@ -273,7 +270,6 @@ def from_breaks(
273270
--------
274271
>>> pd.IntervalIndex.from_arrays([0, 1, 2], [1, 2, 3])
275272
IntervalIndex([(0, 1], (1, 2], (2, 3]],
276-
closed='right',
277273
dtype='interval[int64, right]')
278274
"""
279275
),
@@ -305,7 +301,6 @@ def from_arrays(
305301
--------
306302
>>> pd.IntervalIndex.from_tuples([(0, 1), (1, 2)])
307303
IntervalIndex([(0, 1], (1, 2]],
308-
closed='right',
309304
dtype='interval[int64, right]')
310305
"""
311306
),
@@ -445,7 +440,6 @@ def is_overlapping(self) -> bool:
445440
>>> index = pd.IntervalIndex.from_tuples([(0, 2), (1, 3), (4, 5)])
446441
>>> index
447442
IntervalIndex([(0, 2], (1, 3], (4, 5]],
448-
closed='right',
449443
dtype='interval[int64, right]')
450444
>>> index.is_overlapping
451445
True
@@ -455,7 +449,6 @@ def is_overlapping(self) -> bool:
455449
>>> index = pd.interval_range(0, 3, closed='both')
456450
>>> index
457451
IntervalIndex([[0, 1], [1, 2], [2, 3]],
458-
closed='both',
459452
dtype='interval[int64, both]')
460453
>>> index.is_overlapping
461454
True
@@ -465,7 +458,6 @@ def is_overlapping(self) -> bool:
465458
>>> index = pd.interval_range(0, 3, closed='left')
466459
>>> index
467460
IntervalIndex([[0, 1), [1, 2), [2, 3)],
468-
closed='left',
469461
dtype='interval[int64, left]')
470462
>>> index.is_overlapping
471463
False
@@ -777,17 +769,11 @@ def _convert_list_indexer(self, keyarr):
777769
def _is_comparable_dtype(self, dtype: DtypeObj) -> bool:
778770
if not isinstance(dtype, IntervalDtype):
779771
return False
772+
if self.closed != dtype.closed:
773+
return False
780774
common_subtype = find_common_type([self.dtype.subtype, dtype.subtype])
781775
return not is_object_dtype(common_subtype)
782776

783-
def _should_compare(self, other) -> bool:
784-
other = unpack_nested_dtype(other)
785-
if is_object_dtype(other.dtype):
786-
return True
787-
if not self._is_comparable_dtype(other.dtype):
788-
return False
789-
return other.closed == self.closed
790-
791777
# --------------------------------------------------------------------
792778

793779
@cache_readonly
@@ -911,7 +897,7 @@ def _format_data(self, name=None):
911897
return summary + "," + self._format_space()
912898

913899
def _format_attrs(self):
914-
attrs = [("closed", repr(self.closed))]
900+
attrs = []
915901
if self.name is not None:
916902
attrs.append(("name", default_pprint(self.name)))
917903
attrs.append(("dtype", f"'{self.dtype}'"))
@@ -1117,7 +1103,6 @@ def interval_range(
11171103
11181104
>>> pd.interval_range(start=0, end=5)
11191105
IntervalIndex([(0, 1], (1, 2], (2, 3], (3, 4], (4, 5]],
1120-
closed='right',
11211106
dtype='interval[int64, right]')
11221107
11231108
Additionally, datetime-like input is also supported.
@@ -1126,15 +1111,15 @@ def interval_range(
11261111
... end=pd.Timestamp('2017-01-04'))
11271112
IntervalIndex([(2017-01-01, 2017-01-02], (2017-01-02, 2017-01-03],
11281113
(2017-01-03, 2017-01-04]],
1129-
closed='right', dtype='interval[datetime64[ns], right]')
1114+
dtype='interval[datetime64[ns], right]')
11301115
11311116
The ``freq`` parameter specifies the frequency between the left and right.
11321117
endpoints of the individual intervals within the ``IntervalIndex``. For
11331118
numeric ``start`` and ``end``, the frequency must also be numeric.
11341119
11351120
>>> pd.interval_range(start=0, periods=4, freq=1.5)
11361121
IntervalIndex([(0.0, 1.5], (1.5, 3.0], (3.0, 4.5], (4.5, 6.0]],
1137-
closed='right', dtype='interval[float64, right]')
1122+
dtype='interval[float64, right]')
11381123
11391124
Similarly, for datetime-like ``start`` and ``end``, the frequency must be
11401125
convertible to a DateOffset.
@@ -1143,22 +1128,21 @@ def interval_range(
11431128
... periods=3, freq='MS')
11441129
IntervalIndex([(2017-01-01, 2017-02-01], (2017-02-01, 2017-03-01],
11451130
(2017-03-01, 2017-04-01]],
1146-
closed='right', dtype='interval[datetime64[ns], right]')
1131+
dtype='interval[datetime64[ns], right]')
11471132
11481133
Specify ``start``, ``end``, and ``periods``; the frequency is generated
11491134
automatically (linearly spaced).
11501135
11511136
>>> pd.interval_range(start=0, end=6, periods=4)
11521137
IntervalIndex([(0.0, 1.5], (1.5, 3.0], (3.0, 4.5], (4.5, 6.0]],
1153-
closed='right',
11541138
dtype='interval[float64, right]')
11551139
11561140
The ``closed`` parameter specifies which endpoints of the individual
11571141
intervals within the ``IntervalIndex`` are closed.
11581142
11591143
>>> pd.interval_range(end=5, periods=4, closed='both')
11601144
IntervalIndex([[1, 2], [2, 3], [3, 4], [4, 5]],
1161-
closed='both', dtype='interval[int64, both]')
1145+
dtype='interval[int64, both]')
11621146
"""
11631147
start = maybe_box_datetimelike(start)
11641148
end = maybe_box_datetimelike(end)

pandas/tests/arrays/interval/test_interval.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ def test_repr():
131131
expected = (
132132
"<IntervalArray>\n"
133133
"[(0, 1], (1, 2]]\n"
134-
"Length: 2, closed: right, dtype: interval[int64, right]"
134+
"Length: 2, dtype: interval[int64, right]"
135135
)
136136
assert result == expected
137137

0 commit comments

Comments
 (0)