Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DEPR: remove itemsize, data, base, flags, strides #29918

Merged
merged 5 commits into from
Nov 30, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 0 additions & 8 deletions doc/redirects.csv
Original file line number Diff line number Diff line change
Expand Up @@ -622,7 +622,6 @@ generated/pandas.Index.asi8,../reference/api/pandas.Index.asi8
generated/pandas.Index.asof,../reference/api/pandas.Index.asof
generated/pandas.Index.asof_locs,../reference/api/pandas.Index.asof_locs
generated/pandas.Index.astype,../reference/api/pandas.Index.astype
generated/pandas.Index.base,../reference/api/pandas.Index.base
generated/pandas.Index.contains,../reference/api/pandas.Index.contains
generated/pandas.Index.copy,../reference/api/pandas.Index.copy
generated/pandas.Index.data,../reference/api/pandas.Index.data
Expand All @@ -639,7 +638,6 @@ generated/pandas.Index.empty,../reference/api/pandas.Index.empty
generated/pandas.Index.equals,../reference/api/pandas.Index.equals
generated/pandas.Index.factorize,../reference/api/pandas.Index.factorize
generated/pandas.Index.fillna,../reference/api/pandas.Index.fillna
generated/pandas.Index.flags,../reference/api/pandas.Index.flags
generated/pandas.Index.format,../reference/api/pandas.Index.format
generated/pandas.Index.get_duplicates,../reference/api/pandas.Index.get_duplicates
generated/pandas.Index.get_indexer_for,../reference/api/pandas.Index.get_indexer_for
Expand Down Expand Up @@ -679,7 +677,6 @@ generated/pandas.Index.is_object,../reference/api/pandas.Index.is_object
generated/pandas.Index.is_type_compatible,../reference/api/pandas.Index.is_type_compatible
generated/pandas.Index.is_unique,../reference/api/pandas.Index.is_unique
generated/pandas.Index.item,../reference/api/pandas.Index.item
generated/pandas.Index.itemsize,../reference/api/pandas.Index.itemsize
generated/pandas.Index.join,../reference/api/pandas.Index.join
generated/pandas.Index.map,../reference/api/pandas.Index.map
generated/pandas.Index.max,../reference/api/pandas.Index.max
Expand Down Expand Up @@ -711,7 +708,6 @@ generated/pandas.Index.sort,../reference/api/pandas.Index.sort
generated/pandas.Index.sortlevel,../reference/api/pandas.Index.sortlevel
generated/pandas.Index.sort_values,../reference/api/pandas.Index.sort_values
generated/pandas.Index.str,../reference/api/pandas.Index.str
generated/pandas.Index.strides,../reference/api/pandas.Index.strides
generated/pandas.Index.summary,../reference/api/pandas.Index.summary
generated/pandas.Index.symmetric_difference,../reference/api/pandas.Index.symmetric_difference
generated/pandas.Index.take,../reference/api/pandas.Index.take
Expand Down Expand Up @@ -1106,7 +1102,6 @@ generated/pandas.Series.at,../reference/api/pandas.Series.at
generated/pandas.Series.at_time,../reference/api/pandas.Series.at_time
generated/pandas.Series.autocorr,../reference/api/pandas.Series.autocorr
generated/pandas.Series.axes,../reference/api/pandas.Series.axes
generated/pandas.Series.base,../reference/api/pandas.Series.base
generated/pandas.Series.between,../reference/api/pandas.Series.between
generated/pandas.Series.between_time,../reference/api/pandas.Series.between_time
generated/pandas.Series.bfill,../reference/api/pandas.Series.bfill
Expand Down Expand Up @@ -1215,7 +1210,6 @@ generated/pandas.Series.fillna,../reference/api/pandas.Series.fillna
generated/pandas.Series.filter,../reference/api/pandas.Series.filter
generated/pandas.Series.first,../reference/api/pandas.Series.first
generated/pandas.Series.first_valid_index,../reference/api/pandas.Series.first_valid_index
generated/pandas.Series.flags,../reference/api/pandas.Series.flags
generated/pandas.Series.floordiv,../reference/api/pandas.Series.floordiv
generated/pandas.Series.from_array,../reference/api/pandas.Series.from_array
generated/pandas.Series.from_csv,../reference/api/pandas.Series.from_csv
Expand Down Expand Up @@ -1248,7 +1242,6 @@ generated/pandas.Series.isnull,../reference/api/pandas.Series.isnull
generated/pandas.Series.is_unique,../reference/api/pandas.Series.is_unique
generated/pandas.Series.item,../reference/api/pandas.Series.item
generated/pandas.Series.items,../reference/api/pandas.Series.items
generated/pandas.Series.itemsize,../reference/api/pandas.Series.itemsize
generated/pandas.Series.__iter__,../reference/api/pandas.Series.__iter__
generated/pandas.Series.iteritems,../reference/api/pandas.Series.iteritems
generated/pandas.Series.ix,../reference/api/pandas.Series.ix
Expand Down Expand Up @@ -1361,7 +1354,6 @@ generated/pandas.Series.str.find,../reference/api/pandas.Series.str.find
generated/pandas.Series.str.get_dummies,../reference/api/pandas.Series.str.get_dummies
generated/pandas.Series.str.get,../reference/api/pandas.Series.str.get
generated/pandas.Series.str,../reference/api/pandas.Series.str
generated/pandas.Series.strides,../reference/api/pandas.Series.strides
generated/pandas.Series.str.index,../reference/api/pandas.Series.str.index
generated/pandas.Series.str.isalnum,../reference/api/pandas.Series.str.isalnum
generated/pandas.Series.str.isalpha,../reference/api/pandas.Series.str.isalpha
Expand Down
3 changes: 0 additions & 3 deletions doc/source/reference/indexing.rst
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,6 @@ Properties
Index.ndim
Index.size
Index.empty
Index.strides
Index.itemsize
Index.base
Index.T
Index.memory_usage

Expand Down
5 changes: 0 additions & 5 deletions doc/source/reference/series.rst
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,11 @@ Attributes
Series.nbytes
Series.ndim
Series.size
Series.strides
Series.itemsize
Series.base
Series.T
Series.memory_usage
Series.hasnans
Series.flags
Series.empty
Series.dtypes
Series.data
Series.name
Series.put

Expand Down
1 change: 1 addition & 0 deletions doc/source/whatsnew/v1.0.0.rst
Original file line number Diff line number Diff line change
Expand Up @@ -463,6 +463,7 @@ or ``matplotlib.Axes.plot``. See :ref:`plotting.formatters` for more.
- Changed the default ``fill_value`` in :meth:`Categorical.take` from ``True`` to ``False`` (:issue:`20841`)
- Changed the default value for the `raw` argument in :func:`Series.rolling().apply() <pandas.core.window.Rolling.apply>`, :func:`DataFrame.rolling().apply() <pandas.core.window.Rolling.apply>`,
- :func:`Series.expanding().apply() <pandas.core.window.Expanding.apply>`, and :func:`DataFrame.expanding().apply() <pandas.core.window.Expanding.apply>` to ``False`` (:issue:`20584`)
- Removed the previously deprecated :attr:`Series.base`, :attr:`Index.base`, :attr:`Categorical.base`, :attr:`Series.flags`, :attr:`Index.flags`, :attr:`PeriodArray.flags`, :attr:`Series.strides`, :attr:`Index.strides`, :attr:`Series.itemsize`, :attr:`Index.itemsize`, :attr:`Series.data`, :attr:`Index.data` (:issue:`20721`)
- Changed :meth:`Timedelta.resolution` to match the behavior of the standard library ``datetime.timedelta.resolution``, for the old behavior, use :meth:`Timedelta.resolution_string` (:issue:`26839`)
- Removed previously deprecated :attr:`Timestamp.weekday_name`, :attr:`DatetimeIndex.weekday_name`, and :attr:`Series.dt.weekday_name` (:issue:`18164`)
- Removed previously deprecated ``errors`` argument in :meth:`Timestamp.tz_localize`, :meth:`DatetimeIndex.tz_localize`, and :meth:`Series.tz_localize` (:issue:`22644`)
Expand Down
7 changes: 0 additions & 7 deletions pandas/core/arrays/categorical.py
Original file line number Diff line number Diff line change
Expand Up @@ -527,13 +527,6 @@ def tolist(self) -> list:

to_list = tolist

@property
def base(self) -> None:
"""
compat, we are always our own object
"""
return None

@classmethod
def _from_inferred_categories(
cls, inferred_categories, inferred_codes, dtype, true_values=None
Expand Down
8 changes: 0 additions & 8 deletions pandas/core/arrays/period.py
Original file line number Diff line number Diff line change
Expand Up @@ -618,14 +618,6 @@ def astype(self, dtype, copy=True):
return self.asfreq(dtype.freq)
return super().astype(dtype, copy=copy)

@property
def flags(self):
# TODO: remove
# We need this since reduction.SeriesBinGrouper uses values.flags
# Ideally, we wouldn't be passing objects down there in the first
# place.
return self._data.flags

# ------------------------------------------------------------------
# Arithmetic Methods
_create_comparison_method = classmethod(_period_array_cmp)
Expand Down
85 changes: 1 addition & 84 deletions pandas/core/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -628,15 +628,7 @@ class IndexOpsMixin:
# ndarray compatibility
__array_priority__ = 1000
_deprecations: FrozenSet[str] = frozenset(
[
"tolist", # tolist is not deprecated, just suppressed in the __dir__
"base",
"data",
"item",
"itemsize",
"flags",
"strides",
]
["tolist", "item"] # tolist is not deprecated, just suppressed in the __dir__
)

def transpose(self, *args, **kwargs):
Expand Down Expand Up @@ -707,95 +699,20 @@ def item(self):
)
return self.values.item()

@property
def data(self):
"""
Return the data pointer of the underlying data.

.. deprecated:: 0.23.0
"""
warnings.warn(
"{obj}.data is deprecated and will be removed "
"in a future version".format(obj=type(self).__name__),
FutureWarning,
stacklevel=2,
)
return self.values.data

@property
def itemsize(self):
"""
Return the size of the dtype of the item of the underlying data.

.. deprecated:: 0.23.0
"""
warnings.warn(
"{obj}.itemsize is deprecated and will be removed "
"in a future version".format(obj=type(self).__name__),
FutureWarning,
stacklevel=2,
)
return self._ndarray_values.itemsize

@property
def nbytes(self):
"""
Return the number of bytes in the underlying data.
"""
return self._values.nbytes

@property
def strides(self):
"""
Return the strides of the underlying data.

.. deprecated:: 0.23.0
"""
warnings.warn(
"{obj}.strides is deprecated and will be removed "
"in a future version".format(obj=type(self).__name__),
FutureWarning,
stacklevel=2,
)
return self._ndarray_values.strides

@property
def size(self):
"""
Return the number of elements in the underlying data.
"""
return len(self._values)

@property
def flags(self):
"""
Return the ndarray.flags for the underlying data.

.. deprecated:: 0.23.0
"""
warnings.warn(
"{obj}.flags is deprecated and will be removed "
"in a future version".format(obj=type(self).__name__),
FutureWarning,
stacklevel=2,
)
return self.values.flags

@property
def base(self):
"""
Return the base object if the memory of the underlying data is shared.

.. deprecated:: 0.23.0
"""
warnings.warn(
"{obj}.base is deprecated and will be removed "
"in a future version".format(obj=type(self).__name__),
FutureWarning,
stacklevel=2,
)
return self.values.base

@property
def array(self) -> ExtensionArray:
"""
Expand Down
14 changes: 0 additions & 14 deletions pandas/core/indexes/interval.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
from operator import le, lt
import textwrap
from typing import Any, Optional, Tuple, Union
import warnings

import numpy as np

Expand Down Expand Up @@ -455,19 +454,6 @@ def size(self):
# Avoid materializing ndarray[Interval]
return self._data.size

@property
def itemsize(self):
msg = (
"IntervalIndex.itemsize is deprecated and will be removed in "
"a future version"
)
warnings.warn(msg, FutureWarning, stacklevel=2)

# suppress the warning from the underlying left/right itemsize
with warnings.catch_warnings():
warnings.simplefilter("ignore")
return self.left.itemsize + self.right.itemsize

def __len__(self) -> int:
return len(self.left)

Expand Down
37 changes: 1 addition & 36 deletions pandas/core/indexes/period.py
Original file line number Diff line number Diff line change
Expand Up @@ -911,20 +911,9 @@ def __setstate__(self, state):

_unpickle_compat = __setstate__

@property
def flags(self):
""" return the ndarray.flags for the underlying data """
warnings.warn(
"{obj}.flags is deprecated and will be removed "
"in a future version".format(obj=type(self).__name__),
FutureWarning,
stacklevel=2,
)
return self._ndarray_values.flags

def item(self):
"""
return the first element of the underlying data as a python
Return the first element of the underlying data as a python
scalar

.. deprecated:: 0.25.0
Expand All @@ -943,30 +932,6 @@ def item(self):
# copy numpy's message here because Py26 raises an IndexError
raise ValueError("can only convert an array of size 1 to a Python scalar")

@property
def data(self):
""" return the data pointer of the underlying data """
warnings.warn(
"{obj}.data is deprecated and will be removed "
"in a future version".format(obj=type(self).__name__),
FutureWarning,
stacklevel=2,
)
return np.asarray(self._data).data

@property
def base(self):
""" return the base object if the memory of the underlying data is
shared
"""
warnings.warn(
"{obj}.base is deprecated and will be removed "
"in a future version".format(obj=type(self).__name__),
FutureWarning,
stacklevel=2,
)
return np.asarray(self._data)

def memory_usage(self, deep=False):
result = super().memory_usage(deep=deep)
if hasattr(self, "_cache") and "_int64index" in self._cache:
Expand Down
11 changes: 0 additions & 11 deletions pandas/tests/indexes/interval/test_interval.py
Original file line number Diff line number Diff line change
Expand Up @@ -836,17 +836,6 @@ def test_nbytes(self):
expected = 64 # 4 * 8 * 2
assert result == expected

def test_itemsize(self):
# GH 19209
left = np.arange(0, 4, dtype="i8")
right = np.arange(1, 5, dtype="i8")
expected = 16 # 8 * 2

with tm.assert_produces_warning(FutureWarning, check_stacklevel=False):
result = IntervalIndex.from_arrays(left, right).itemsize

assert result == expected

@pytest.mark.parametrize("new_closed", ["left", "right", "both", "neither"])
def test_set_closed(self, name, closed, new_closed):
# GH 21670
Expand Down
6 changes: 4 additions & 2 deletions pandas/tests/indexes/test_category.py
Original file line number Diff line number Diff line change
Expand Up @@ -788,8 +788,10 @@ def test_ensure_copied_data(self, indices):
# Index.__new__ is honored.
#
# Must be tested separately from other indexes because
# self.value is not an ndarray.
_base = lambda ar: ar if ar.base is None else ar.base
# self.values is not an ndarray.
# GH#29918 Index.base has been removed
# FIXME: is this test still meaningful?
_base = lambda ar: ar if getattr(ar, "base", None) is None else ar.base

result = CategoricalIndex(indices.values, copy=True)
tm.assert_index_equal(indices, result)
Expand Down
16 changes: 2 additions & 14 deletions pandas/tests/test_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -333,20 +333,8 @@ def test_ndarray_compat_properties(self):
assert getattr(o, p, None) is not None

# deprecated properties
for p in ["flags", "strides", "itemsize"]:
with tm.assert_produces_warning(FutureWarning):
assert getattr(o, p, None) is not None

with tm.assert_produces_warning(FutureWarning):
assert hasattr(o, "base")

# If we have a datetime-like dtype then needs a view to work
# but the user is responsible for that
try:
with tm.assert_produces_warning(FutureWarning):
assert o.data is not None
except ValueError:
pass
for p in ["flags", "strides", "itemsize", "base", "data"]:
assert not hasattr(o, p)

with pytest.raises(ValueError):
with tm.assert_produces_warning(FutureWarning):
Expand Down