Skip to content

Commit 06f8347

Browse files
TomAugspurgerjreback
authored andcommitted
API: Make is_strictly_monotonic_* private (#16576)
1 parent 5f312da commit 06f8347

File tree

9 files changed

+59
-52
lines changed

9 files changed

+59
-52
lines changed

doc/source/advanced.rst

+10
Original file line numberDiff line numberDiff line change
@@ -948,6 +948,16 @@ On the other hand, if the index is not monotonic, then both slice bounds must be
948948
In [11]: df.loc[2:3, :]
949949
KeyError: 'Cannot get right slice bound for non-unique label: 3'
950950
951+
:meth:`Index.is_monotonic_increasing` and :meth:`Index.is_monotonic_decreasing` only check that
952+
an index is weakly monotonic. To check for strict montonicity, you can combine one of those with
953+
:meth:`Index.is_unique`
954+
955+
.. ipython:: python
956+
957+
weakly_monotonic = pd.Index(['a', 'b', 'c', 'c'])
958+
weakly_monotonic
959+
weakly_monotonic.is_monotonic_increasing
960+
weakly_monotonic.is_monotonic_increasing & weakly_monotonic.is_unique
951961
952962
Endpoints are inclusive
953963
~~~~~~~~~~~~~~~~~~~~~~~

doc/source/api.rst

-2
Original file line numberDiff line numberDiff line change
@@ -1286,8 +1286,6 @@ Attributes
12861286
Index.is_monotonic
12871287
Index.is_monotonic_increasing
12881288
Index.is_monotonic_decreasing
1289-
Index.is_strictly_monotonic_increasing
1290-
Index.is_strictly_monotonic_decreasing
12911289
Index.is_unique
12921290
Index.has_duplicates
12931291
Index.dtype

doc/source/whatsnew/v0.20.2.txt

-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ Enhancements
2121

2222
- Unblocked access to additional compression types supported in pytables: 'blosc:blosclz, 'blosc:lz4', 'blosc:lz4hc', 'blosc:snappy', 'blosc:zlib', 'blosc:zstd' (:issue:`14478`)
2323
- ``Series`` provides a ``to_latex`` method (:issue:`16180`)
24-
- Added :attr:`Index.is_strictly_monotonic_increasing` and :attr:`Index.is_strictly_monotonic_decreasing` properties (:issue:`16515`)
2524

2625
- A new groupby method :meth:`~pandas.core.groupby.GroupBy.ngroup`,
2726
parallel to the existing :meth:`~pandas.core.groupby.GroupBy.cumcount`,

pandas/core/indexes/base.py

+8-8
Original file line numberDiff line numberDiff line change
@@ -1221,33 +1221,33 @@ def is_monotonic_decreasing(self):
12211221
return self._engine.is_monotonic_decreasing
12221222

12231223
@property
1224-
def is_strictly_monotonic_increasing(self):
1224+
def _is_strictly_monotonic_increasing(self):
12251225
"""return if the index is strictly monotonic increasing
12261226
(only increasing) values
12271227
12281228
Examples
12291229
--------
1230-
>>> Index([1, 2, 3]).is_strictly_monotonic_increasing
1230+
>>> Index([1, 2, 3])._is_strictly_monotonic_increasing
12311231
True
1232-
>>> Index([1, 2, 2]).is_strictly_monotonic_increasing
1232+
>>> Index([1, 2, 2])._is_strictly_monotonic_increasing
12331233
False
1234-
>>> Index([1, 3, 2]).is_strictly_monotonic_increasing
1234+
>>> Index([1, 3, 2])._is_strictly_monotonic_increasing
12351235
False
12361236
"""
12371237
return self.is_unique and self.is_monotonic_increasing
12381238

12391239
@property
1240-
def is_strictly_monotonic_decreasing(self):
1240+
def _is_strictly_monotonic_decreasing(self):
12411241
"""return if the index is strictly monotonic decreasing
12421242
(only decreasing) values
12431243
12441244
Examples
12451245
--------
1246-
>>> Index([3, 2, 1]).is_strictly_monotonic_decreasing
1246+
>>> Index([3, 2, 1])._is_strictly_monotonic_decreasing
12471247
True
1248-
>>> Index([3, 2, 2]).is_strictly_monotonic_decreasing
1248+
>>> Index([3, 2, 2])._is_strictly_monotonic_decreasing
12491249
False
1250-
>>> Index([3, 1, 2]).is_strictly_monotonic_decreasing
1250+
>>> Index([3, 1, 2])._is_strictly_monotonic_decreasing
12511251
False
12521252
"""
12531253
return self.is_unique and self.is_monotonic_decreasing

pandas/core/indexes/datetimes.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1472,7 +1472,7 @@ def _maybe_cast_slice_bound(self, label, side, kind):
14721472
# the bounds need swapped if index is reverse sorted and has a
14731473
# length > 1 (is_monotonic_decreasing gives True for empty
14741474
# and length 1 index)
1475-
if self.is_strictly_monotonic_decreasing and len(self) > 1:
1475+
if self._is_strictly_monotonic_decreasing and len(self) > 1:
14761476
return upper if side == 'left' else lower
14771477
return lower if side == 'left' else upper
14781478
else:

pandas/tests/indexes/test_base.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -1330,8 +1330,8 @@ def test_is_monotonic_incomparable(self):
13301330
index = Index([5, datetime.now(), 7])
13311331
assert not index.is_monotonic_increasing
13321332
assert not index.is_monotonic_decreasing
1333-
assert not index.is_strictly_monotonic_increasing
1334-
assert not index.is_strictly_monotonic_decreasing
1333+
assert not index._is_strictly_monotonic_increasing
1334+
assert not index._is_strictly_monotonic_decreasing
13351335

13361336
def test_get_set_value(self):
13371337
values = np.random.randn(100)
@@ -2030,8 +2030,8 @@ def test_is_monotonic_na(self):
20302030
for index in examples:
20312031
assert not index.is_monotonic_increasing
20322032
assert not index.is_monotonic_decreasing
2033-
assert not index.is_strictly_monotonic_increasing
2034-
assert not index.is_strictly_monotonic_decreasing
2033+
assert not index._is_strictly_monotonic_increasing
2034+
assert not index._is_strictly_monotonic_decreasing
20352035

20362036
def test_repr_summary(self):
20372037
with cf.option_context('display.max_seq_items', 10):

pandas/tests/indexes/test_multi.py

+16-16
Original file line numberDiff line numberDiff line change
@@ -2373,30 +2373,30 @@ def test_is_monotonic(self):
23732373
i = MultiIndex.from_product([np.arange(10),
23742374
np.arange(10)], names=['one', 'two'])
23752375
assert i.is_monotonic
2376-
assert i.is_strictly_monotonic_increasing
2376+
assert i._is_strictly_monotonic_increasing
23772377
assert Index(i.values).is_monotonic
2378-
assert i.is_strictly_monotonic_increasing
2378+
assert i._is_strictly_monotonic_increasing
23792379

23802380
i = MultiIndex.from_product([np.arange(10, 0, -1),
23812381
np.arange(10)], names=['one', 'two'])
23822382
assert not i.is_monotonic
2383-
assert not i.is_strictly_monotonic_increasing
2383+
assert not i._is_strictly_monotonic_increasing
23842384
assert not Index(i.values).is_monotonic
2385-
assert not Index(i.values).is_strictly_monotonic_increasing
2385+
assert not Index(i.values)._is_strictly_monotonic_increasing
23862386

23872387
i = MultiIndex.from_product([np.arange(10),
23882388
np.arange(10, 0, -1)],
23892389
names=['one', 'two'])
23902390
assert not i.is_monotonic
2391-
assert not i.is_strictly_monotonic_increasing
2391+
assert not i._is_strictly_monotonic_increasing
23922392
assert not Index(i.values).is_monotonic
2393-
assert not Index(i.values).is_strictly_monotonic_increasing
2393+
assert not Index(i.values)._is_strictly_monotonic_increasing
23942394

23952395
i = MultiIndex.from_product([[1.0, np.nan, 2.0], ['a', 'b', 'c']])
23962396
assert not i.is_monotonic
2397-
assert not i.is_strictly_monotonic_increasing
2397+
assert not i._is_strictly_monotonic_increasing
23982398
assert not Index(i.values).is_monotonic
2399-
assert not Index(i.values).is_strictly_monotonic_increasing
2399+
assert not Index(i.values)._is_strictly_monotonic_increasing
24002400

24012401
# string ordering
24022402
i = MultiIndex(levels=[['foo', 'bar', 'baz', 'qux'],
@@ -2406,8 +2406,8 @@ def test_is_monotonic(self):
24062406
names=['first', 'second'])
24072407
assert not i.is_monotonic
24082408
assert not Index(i.values).is_monotonic
2409-
assert not i.is_strictly_monotonic_increasing
2410-
assert not Index(i.values).is_strictly_monotonic_increasing
2409+
assert not i._is_strictly_monotonic_increasing
2410+
assert not Index(i.values)._is_strictly_monotonic_increasing
24112411

24122412
i = MultiIndex(levels=[['bar', 'baz', 'foo', 'qux'],
24132413
['mom', 'next', 'zenith']],
@@ -2416,8 +2416,8 @@ def test_is_monotonic(self):
24162416
names=['first', 'second'])
24172417
assert i.is_monotonic
24182418
assert Index(i.values).is_monotonic
2419-
assert i.is_strictly_monotonic_increasing
2420-
assert Index(i.values).is_strictly_monotonic_increasing
2419+
assert i._is_strictly_monotonic_increasing
2420+
assert Index(i.values)._is_strictly_monotonic_increasing
24212421

24222422
# mixed levels, hits the TypeError
24232423
i = MultiIndex(
@@ -2428,20 +2428,20 @@ def test_is_monotonic(self):
24282428
names=['household_id', 'asset_id'])
24292429

24302430
assert not i.is_monotonic
2431-
assert not i.is_strictly_monotonic_increasing
2431+
assert not i._is_strictly_monotonic_increasing
24322432

24332433
def test_is_strictly_monotonic(self):
24342434
idx = pd.MultiIndex(levels=[['bar', 'baz'], ['mom', 'next']],
24352435
labels=[[0, 0, 1, 1], [0, 0, 0, 1]])
24362436
assert idx.is_monotonic_increasing
2437-
assert not idx.is_strictly_monotonic_increasing
2437+
assert not idx._is_strictly_monotonic_increasing
24382438

24392439
@pytest.mark.xfail(reason="buggy MultiIndex.is_monotonic_decresaing.")
2440-
def test_is_strictly_monotonic_decreasing(self):
2440+
def test__is_strictly_monotonic_decreasing(self):
24412441
idx = pd.MultiIndex(levels=[['baz', 'bar'], ['next', 'mom']],
24422442
labels=[[0, 0, 1, 1], [0, 0, 0, 1]])
24432443
assert idx.is_monotonic_decreasing
2444-
assert not idx.is_strictly_monotonic_decreasing
2444+
assert not idx._is_strictly_monotonic_decreasing
24452445

24462446
def test_reconstruct_sort(self):
24472447

pandas/tests/indexes/test_numeric.py

+10-10
Original file line numberDiff line numberDiff line change
@@ -465,36 +465,36 @@ def test_view(self):
465465
def test_is_monotonic(self):
466466
assert self.index.is_monotonic
467467
assert self.index.is_monotonic_increasing
468-
assert self.index.is_strictly_monotonic_increasing
468+
assert self.index._is_strictly_monotonic_increasing
469469
assert not self.index.is_monotonic_decreasing
470-
assert not self.index.is_strictly_monotonic_decreasing
470+
assert not self.index._is_strictly_monotonic_decreasing
471471

472472
index = self._holder([4, 3, 2, 1])
473473
assert not index.is_monotonic
474-
assert not index.is_strictly_monotonic_increasing
475-
assert index.is_strictly_monotonic_decreasing
474+
assert not index._is_strictly_monotonic_increasing
475+
assert index._is_strictly_monotonic_decreasing
476476

477477
index = self._holder([1])
478478
assert index.is_monotonic
479479
assert index.is_monotonic_increasing
480480
assert index.is_monotonic_decreasing
481-
assert index.is_strictly_monotonic_increasing
482-
assert index.is_strictly_monotonic_decreasing
481+
assert index._is_strictly_monotonic_increasing
482+
assert index._is_strictly_monotonic_decreasing
483483

484484
def test_is_strictly_monotonic(self):
485485
index = self._holder([1, 1, 2, 3])
486486
assert index.is_monotonic_increasing
487-
assert not index.is_strictly_monotonic_increasing
487+
assert not index._is_strictly_monotonic_increasing
488488

489489
index = self._holder([3, 2, 1, 1])
490490
assert index.is_monotonic_decreasing
491-
assert not index.is_strictly_monotonic_decreasing
491+
assert not index._is_strictly_monotonic_decreasing
492492

493493
index = self._holder([1, 1])
494494
assert index.is_monotonic_increasing
495495
assert index.is_monotonic_decreasing
496-
assert not index.is_strictly_monotonic_increasing
497-
assert not index.is_strictly_monotonic_decreasing
496+
assert not index._is_strictly_monotonic_increasing
497+
assert not index._is_strictly_monotonic_decreasing
498498

499499
def test_logical_compat(self):
500500
idx = self.create_index()

pandas/tests/indexes/test_range.py

+10-10
Original file line numberDiff line numberDiff line change
@@ -331,35 +331,35 @@ def test_is_monotonic(self):
331331
assert self.index.is_monotonic
332332
assert self.index.is_monotonic_increasing
333333
assert not self.index.is_monotonic_decreasing
334-
assert self.index.is_strictly_monotonic_increasing
335-
assert not self.index.is_strictly_monotonic_decreasing
334+
assert self.index._is_strictly_monotonic_increasing
335+
assert not self.index._is_strictly_monotonic_decreasing
336336

337337
index = RangeIndex(4, 0, -1)
338338
assert not index.is_monotonic
339-
assert not index.is_strictly_monotonic_increasing
339+
assert not index._is_strictly_monotonic_increasing
340340
assert index.is_monotonic_decreasing
341-
assert index.is_strictly_monotonic_decreasing
341+
assert index._is_strictly_monotonic_decreasing
342342

343343
index = RangeIndex(1, 2)
344344
assert index.is_monotonic
345345
assert index.is_monotonic_increasing
346346
assert index.is_monotonic_decreasing
347-
assert index.is_strictly_monotonic_increasing
348-
assert index.is_strictly_monotonic_decreasing
347+
assert index._is_strictly_monotonic_increasing
348+
assert index._is_strictly_monotonic_decreasing
349349

350350
index = RangeIndex(2, 1)
351351
assert index.is_monotonic
352352
assert index.is_monotonic_increasing
353353
assert index.is_monotonic_decreasing
354-
assert index.is_strictly_monotonic_increasing
355-
assert index.is_strictly_monotonic_decreasing
354+
assert index._is_strictly_monotonic_increasing
355+
assert index._is_strictly_monotonic_decreasing
356356

357357
index = RangeIndex(1, 1)
358358
assert index.is_monotonic
359359
assert index.is_monotonic_increasing
360360
assert index.is_monotonic_decreasing
361-
assert index.is_strictly_monotonic_increasing
362-
assert index.is_strictly_monotonic_decreasing
361+
assert index._is_strictly_monotonic_increasing
362+
assert index._is_strictly_monotonic_decreasing
363363

364364
def test_equals_range(self):
365365
equiv_pairs = [(RangeIndex(0, 9, 2), RangeIndex(0, 10, 2)),

0 commit comments

Comments
 (0)