129
129
``Interval`` objects:
130
130
131
131
>>> pd.arrays.IntervalArray([pd.Interval(0, 1), pd.Interval(1, 5)])
132
- IntervalArray([(0, 1], (1, 5]],
133
- closed='right',
134
- dtype=' interval[int64]')
132
+ < IntervalArray>
133
+ [(0, 1], (1, 5]]
134
+ Length: 2, closed: right, dtype: interval[int64]
135
135
136
136
It may also be constructed using one of the constructor
137
137
methods: :meth:`IntervalArray.from_arrays`,
@@ -248,9 +248,8 @@ def _from_factorized(cls, values, original):
248
248
values = values .astype (original .dtype .subtype )
249
249
return cls (values , closed = original .closed )
250
250
251
- _interval_shared_docs [
252
- "from_breaks"
253
- ] = """
251
+ _interval_shared_docs ["from_breaks" ] = textwrap .dedent (
252
+ """
254
253
Construct an %(klass)s from an array of splits.
255
254
256
255
Parameters
@@ -277,24 +276,34 @@ def _from_factorized(cls, values, original):
277
276
%(klass)s.from_arrays : Construct from a left and right array.
278
277
%(klass)s.from_tuples : Construct from a sequence of tuples.
279
278
280
- Examples
281
- --------
282
- >>> pd.%(qualname)s.from_breaks([0, 1, 2, 3])
283
- %(klass)s([(0, 1], (1, 2], (2, 3]],
284
- closed='right',
285
- dtype='interval[int64]')
279
+ %(examples)s\
286
280
"""
281
+ )
287
282
288
283
@classmethod
289
- @Appender (_interval_shared_docs ["from_breaks" ] % _shared_docs_kwargs )
284
+ @Appender (
285
+ _interval_shared_docs ["from_breaks" ]
286
+ % dict (
287
+ klass = "IntervalArray" ,
288
+ examples = textwrap .dedent (
289
+ """\
290
+ Examples
291
+ --------
292
+ >>> pd.arrays.IntervalArray.from_breaks([0, 1, 2, 3])
293
+ <IntervalArray>
294
+ [(0, 1], (1, 2], (2, 3]]
295
+ Length: 3, closed: right, dtype: interval[int64]
296
+ """
297
+ ),
298
+ )
299
+ )
290
300
def from_breaks (cls , breaks , closed = "right" , copy = False , dtype = None ):
291
301
breaks = maybe_convert_platform_interval (breaks )
292
302
293
303
return cls .from_arrays (breaks [:- 1 ], breaks [1 :], closed , copy = copy , dtype = dtype )
294
304
295
- _interval_shared_docs [
296
- "from_arrays"
297
- ] = """
305
+ _interval_shared_docs ["from_arrays" ] = textwrap .dedent (
306
+ """
298
307
Construct from two arrays defining the left and right bounds.
299
308
300
309
Parameters
@@ -340,16 +349,25 @@ def from_breaks(cls, breaks, closed="right", copy=False, dtype=None):
340
349
using an unsupported type for `left` or `right`. At the moment,
341
350
'category', 'object', and 'string' subtypes are not supported.
342
351
343
- Examples
344
- --------
345
- >>> %(klass)s.from_arrays([0, 1, 2], [1, 2, 3])
346
- %(klass)s([(0, 1], (1, 2], (2, 3]],
347
- closed='right',
348
- dtype='interval[int64]')
352
+ %(examples)s\
349
353
"""
354
+ )
350
355
351
356
@classmethod
352
- @Appender (_interval_shared_docs ["from_arrays" ] % _shared_docs_kwargs )
357
+ @Appender (
358
+ _interval_shared_docs ["from_arrays" ]
359
+ % dict (
360
+ klass = "IntervalArray" ,
361
+ examples = textwrap .dedent (
362
+ """\
363
+ >>> pd.arrays.IntervalArray.from_arrays([0, 1, 2], [1, 2, 3])
364
+ <IntervalArray>
365
+ [(0, 1], (1, 2], (2, 3]]
366
+ Length: 3, closed: right, dtype: interval[int64]
367
+ """
368
+ ),
369
+ )
370
+ )
353
371
def from_arrays (cls , left , right , closed = "right" , copy = False , dtype = None ):
354
372
left = maybe_convert_platform_interval (left )
355
373
right = maybe_convert_platform_interval (right )
@@ -358,9 +376,8 @@ def from_arrays(cls, left, right, closed="right", copy=False, dtype=None):
358
376
left , right , closed , copy = copy , dtype = dtype , verify_integrity = True
359
377
)
360
378
361
- _interval_shared_docs [
362
- "from_tuples"
363
- ] = """
379
+ _interval_shared_docs ["from_tuples" ] = textwrap .dedent (
380
+ """
364
381
Construct an %(klass)s from an array-like of tuples.
365
382
366
383
Parameters
@@ -389,15 +406,27 @@ def from_arrays(cls, left, right, closed="right", copy=False, dtype=None):
389
406
%(klass)s.from_breaks : Construct an %(klass)s from an array of
390
407
splits.
391
408
392
- Examples
393
- --------
394
- >>> pd.%(qualname)s.from_tuples([(0, 1), (1, 2)])
395
- %(klass)s([(0, 1], (1, 2]],
396
- closed='right', dtype='interval[int64]')
409
+ %(examples)s\
397
410
"""
411
+ )
398
412
399
413
@classmethod
400
- @Appender (_interval_shared_docs ["from_tuples" ] % _shared_docs_kwargs )
414
+ @Appender (
415
+ _interval_shared_docs ["from_tuples" ]
416
+ % dict (
417
+ klass = "IntervalArray" ,
418
+ examples = textwrap .dedent (
419
+ """\
420
+ Examples
421
+ --------
422
+ >>> pd.arrays.IntervalArray.from_tuples([(0, 1), (1, 2)])
423
+ <IntervalArray>
424
+ [(0, 1], (1, 2]]
425
+ Length: 2, closed: right, dtype: interval[int64]
426
+ """
427
+ ),
428
+ )
429
+ )
401
430
def from_tuples (cls , data , closed = "right" , copy = False , dtype = None ):
402
431
if len (data ):
403
432
left , right = [], []
@@ -832,16 +861,20 @@ def _format_data(self):
832
861
return summary
833
862
834
863
def __repr__ (self ):
835
- tpl = textwrap .dedent (
836
- """\
837
- {cls}({data},
838
- {lead}closed='{closed}',
839
- {lead}dtype='{dtype}')"""
864
+ template = (
865
+ "{class_name}"
866
+ "{data}\n "
867
+ "Length: {length}, closed: {closed}, dtype: {dtype}"
840
868
)
841
- return tpl .format (
842
- cls = self .__class__ .__name__ ,
843
- data = self ._format_data (),
844
- lead = " " * len (self .__class__ .__name__ ) + " " ,
869
+ # the short repr has no trailing newline, while the truncated
870
+ # repr does. So we include a newline in our template, and strip
871
+ # any trailing newlines from format_object_summary
872
+ data = self ._format_data ()
873
+ class_name = "<{}>\n " .format (self .__class__ .__name__ )
874
+ return template .format (
875
+ class_name = class_name ,
876
+ data = data ,
877
+ length = len (self ),
845
878
closed = self .closed ,
846
879
dtype = self .dtype ,
847
880
)
@@ -874,9 +907,8 @@ def closed(self):
874
907
"""
875
908
return self ._closed
876
909
877
- _interval_shared_docs [
878
- "set_closed"
879
- ] = """
910
+ _interval_shared_docs ["set_closed" ] = textwrap .dedent (
911
+ """
880
912
Return an %(klass)s identical to the current one, but closed on the
881
913
specified side.
882
914
@@ -892,20 +924,31 @@ def closed(self):
892
924
-------
893
925
new_index : %(klass)s
894
926
927
+ %(examples)s\
928
+ """
929
+ )
930
+
931
+ @Appender (
932
+ _interval_shared_docs ["set_closed" ]
933
+ % dict (
934
+ klass = "IntervalArray" ,
935
+ examples = textwrap .dedent (
936
+ """\
895
937
Examples
896
938
--------
897
- >>> index = pd.interval_range(0, 3 )
939
+ >>> index = pd.arrays.IntervalArray.from_breaks(range(4) )
898
940
>>> index
899
- IntervalIndex([(0, 1], (1, 2], (2, 3]],
900
- closed='right',
901
- dtype=' interval[int64]')
941
+ <IntervalArray>
942
+ [(0, 1], (1, 2], (2, 3]]
943
+ Length: 3, closed: right, dtype: interval[int64]
902
944
>>> index.set_closed('both')
903
- IntervalIndex([[0, 1], [1, 2], [2, 3]],
904
- closed='both',
905
- dtype=' interval[int64]')
945
+ <IntervalArray>
946
+ [[0, 1], [1, 2], [2, 3]]
947
+ Length: 3, closed: both, dtype: interval[int64]
906
948
"""
907
-
908
- @Appender (_interval_shared_docs ["set_closed" ] % _shared_docs_kwargs )
949
+ ),
950
+ )
951
+ )
909
952
def set_closed (self , closed ):
910
953
if closed not in _VALID_CLOSED :
911
954
msg = "invalid option for 'closed': {closed}"
@@ -1028,9 +1071,8 @@ def repeat(self, repeats, axis=None):
1028
1071
right_repeat = self .right .repeat (repeats )
1029
1072
return self ._shallow_copy (left = left_repeat , right = right_repeat )
1030
1073
1031
- _interval_shared_docs [
1032
- "contains"
1033
- ] = """
1074
+ _interval_shared_docs ["contains" ] = textwrap .dedent (
1075
+ """
1034
1076
Check elementwise if the Intervals contain the value.
1035
1077
1036
1078
Return a boolean mask whether the value is contained in the Intervals
@@ -1055,16 +1097,27 @@ def repeat(self, repeats, axis=None):
1055
1097
1056
1098
Examples
1057
1099
--------
1058
- >>> intervals = pd.%(qualname)s.from_tuples([(0, 1), (1, 3), (2, 4)])
1059
- >>> intervals
1060
- %(klass)s([(0, 1], (1, 3], (2, 4]],
1061
- closed='right',
1062
- dtype='interval[int64]')
1100
+ %(examples)s
1063
1101
>>> intervals.contains(0.5)
1064
1102
array([ True, False, False])
1065
1103
"""
1104
+ )
1066
1105
1067
- @Appender (_interval_shared_docs ["contains" ] % _shared_docs_kwargs )
1106
+ @Appender (
1107
+ _interval_shared_docs ["contains" ]
1108
+ % dict (
1109
+ klass = "IntervalArray" ,
1110
+ examples = textwrap .dedent (
1111
+ """\
1112
+ >>> intervals = pd.arrays.IntervalArray.from_tuples([(0, 1), (1, 3), (2, 4)])
1113
+ >>> intervals
1114
+ <IntervalArray>
1115
+ [(0, 1], (1, 3], (2, 4]]
1116
+ Length: 3, closed: right, dtype: interval[int64]
1117
+ """
1118
+ ),
1119
+ )
1120
+ )
1068
1121
def contains (self , other ):
1069
1122
if isinstance (other , Interval ):
1070
1123
raise NotImplementedError ("contains not implemented for two intervals" )
@@ -1073,9 +1126,8 @@ def contains(self, other):
1073
1126
other < self .right if self .open_right else other <= self .right
1074
1127
)
1075
1128
1076
- _interval_shared_docs [
1077
- "overlaps"
1078
- ] = """
1129
+ _interval_shared_docs ["overlaps" ] = textwrap .dedent (
1130
+ """
1079
1131
Check elementwise if an Interval overlaps the values in the %(klass)s.
1080
1132
1081
1133
Two intervals overlap if they share a common point, including closed
@@ -1086,7 +1138,7 @@ def contains(self, other):
1086
1138
1087
1139
Parameters
1088
1140
----------
1089
- other : Interval
1141
+ other : %(klass)s
1090
1142
Interval to check against for an overlap.
1091
1143
1092
1144
Returns
@@ -1100,11 +1152,7 @@ def contains(self, other):
1100
1152
1101
1153
Examples
1102
1154
--------
1103
- >>> intervals = pd.%(qualname)s.from_tuples([(0, 1), (1, 3), (2, 4)])
1104
- >>> intervals
1105
- %(klass)s([(0, 1], (1, 3], (2, 4]],
1106
- closed='right',
1107
- dtype='interval[int64]')
1155
+ %(examples)s
1108
1156
>>> intervals.overlaps(pd.Interval(0.5, 1.5))
1109
1157
array([ True, True, False])
1110
1158
@@ -1117,9 +1165,25 @@ def contains(self, other):
1117
1165
1118
1166
>>> intervals.overlaps(pd.Interval(1, 2, closed='right'))
1119
1167
array([False, True, False])
1120
- """
1168
+ """
1169
+ )
1121
1170
1122
- @Appender (_interval_shared_docs ["overlaps" ] % _shared_docs_kwargs )
1171
+ @Appender (
1172
+ _interval_shared_docs ["overlaps" ]
1173
+ % dict (
1174
+ klass = "IntervalArray" ,
1175
+ examples = textwrap .dedent (
1176
+ """\
1177
+ >>> data = [(0, 1), (1, 3), (2, 4)]
1178
+ >>> intervals = pd.arrays.IntervalArray.from_tuples(data)
1179
+ >>> intervals
1180
+ <IntervalArray>
1181
+ [(0, 1], (1, 3], (2, 4]]
1182
+ Length: 3, closed: right, dtype: interval[int64]
1183
+ """
1184
+ ),
1185
+ )
1186
+ )
1123
1187
def overlaps (self , other ):
1124
1188
if isinstance (other , (IntervalArray , ABCIntervalIndex )):
1125
1189
raise NotImplementedError
0 commit comments