Skip to content

Commit

Permalink
CLN: enforce the deprecation of exposing blocks in core.internals (#5…
Browse files Browse the repository at this point in the history
…8467)

* CLN: enforce the deprecation of exposing blocks in core.internals

* remove the function __getattr__, and entries from __all__

* fix mypy error

* add a note to v3.0.0

* skip parquet tests for minimum Pyarrow version

* fixup test_basic

* fix pre-commit error

* skip pyarrow=10.0.1 in test_parquet.py

* fix mypy error

* fix pre-commit error

* fixup test_parquet.py

* fix pre-commit error

* fixup test_parquet.py

* replacee pytest.skip with pytest.importorskip

* skip pyarrow '10.0.1'
  • Loading branch information
natmokval committed May 3, 2024
1 parent ca370af commit 0962dcc
Show file tree
Hide file tree
Showing 5 changed files with 7 additions and 78 deletions.
1 change: 1 addition & 0 deletions doc/source/whatsnew/v3.0.0.rst
Expand Up @@ -253,6 +253,7 @@ Removal of prior version deprecations/changes
- Enforced deprecation of :meth:`Series.interpolate` and :meth:`DataFrame.interpolate` for object-dtype (:issue:`57820`)
- Enforced deprecation of :meth:`offsets.Tick.delta`, use ``pd.Timedelta(obj)`` instead (:issue:`55498`)
- Enforced deprecation of ``axis=None`` acting the same as ``axis=0`` in the DataFrame reductions ``sum``, ``prod``, ``std``, ``var``, and ``sem``, passing ``axis=None`` will now reduce over both axes; this is particularly the case when doing e.g. ``numpy.sum(df)`` (:issue:`21597`)
- Enforced deprecation of ``core.internals`` members ``Block``, ``ExtensionBlock``, and ``DatetimeTZBlock`` (:issue:`58467`)
- Enforced deprecation of non-standard (``np.ndarray``, :class:`ExtensionArray`, :class:`Index`, or :class:`Series`) argument to :func:`api.extensions.take` (:issue:`52981`)
- Enforced deprecation of parsing system timezone strings to ``tzlocal``, which depended on system timezone, pass the 'tz' keyword instead (:issue:`50791`)
- Enforced deprecation of passing a dictionary to :meth:`SeriesGroupBy.agg` (:issue:`52268`)
Expand Down
50 changes: 0 additions & 50 deletions pandas/core/internals/__init__.py
Expand Up @@ -6,58 +6,8 @@
)

__all__ = [
"Block",
"DatetimeTZBlock",
"ExtensionBlock",
"make_block",
"BlockManager",
"SingleBlockManager",
"concatenate_managers",
]


def __getattr__(name: str):
# GH#55139
import warnings

if name == "create_block_manager_from_blocks":
# GH#33892
warnings.warn(
f"{name} is deprecated and will be removed in a future version. "
"Use public APIs instead.",
DeprecationWarning,
# https://github.com/pandas-dev/pandas/pull/55139#pullrequestreview-1720690758
# on hard-coding stacklevel
stacklevel=2,
)
from pandas.core.internals.managers import create_block_manager_from_blocks

return create_block_manager_from_blocks

if name in [
"Block",
"ExtensionBlock",
"DatetimeTZBlock",
]:
warnings.warn(
f"{name} is deprecated and will be removed in a future version. "
"Use public APIs instead.",
DeprecationWarning,
# https://github.com/pandas-dev/pandas/pull/55139#pullrequestreview-1720690758
# on hard-coding stacklevel
stacklevel=2,
)
if name == "DatetimeTZBlock":
from pandas.core.internals.blocks import DatetimeTZBlock

return DatetimeTZBlock
elif name == "ExtensionBlock":
from pandas.core.internals.blocks import ExtensionBlock

return ExtensionBlock
else:
from pandas.core.internals.blocks import Block

return Block

raise AttributeError(f"module 'pandas.core.internals' has no attribute '{name}'")
3 changes: 2 additions & 1 deletion pandas/io/pytables.py
Expand Up @@ -125,7 +125,8 @@
npt,
)

from pandas.core.internals import Block
from pandas.core.internals.blocks import Block


# versioning attribute
_version = "0.15.2"
Expand Down
27 changes: 0 additions & 27 deletions pandas/tests/internals/test_api.py
Expand Up @@ -41,21 +41,6 @@ def test_namespace():
assert set(result) == set(expected + modules)


@pytest.mark.parametrize(
"name",
[
"Block",
"ExtensionBlock",
"DatetimeTZBlock",
],
)
def test_deprecations(name):
# GH#55139
msg = f"{name} is deprecated.* Use public APIs instead"
with tm.assert_produces_warning(DeprecationWarning, match=msg):
getattr(internals, name)


def test_make_block_2d_with_dti():
# GH#41168
dti = pd.date_range("2012", periods=3, tz="UTC")
Expand All @@ -65,18 +50,6 @@ def test_make_block_2d_with_dti():
assert blk.values.shape == (1, 3)


def test_create_block_manager_from_blocks_deprecated():
# GH#33892
# If they must, downstream packages should get this from internals.api,
# not internals.
msg = (
"create_block_manager_from_blocks is deprecated and will be "
"removed in a future version. Use public APIs instead"
)
with tm.assert_produces_warning(DeprecationWarning, match=msg):
internals.create_block_manager_from_blocks


def test_create_dataframe_from_blocks(float_frame):
block = float_frame._mgr.blocks[0]
index = float_frame.index.copy()
Expand Down
4 changes: 4 additions & 0 deletions pandas/tests/io/test_parquet.py
Expand Up @@ -655,6 +655,7 @@ def test_read_empty_array(self, pa, dtype):
"value": pd.array([], dtype=dtype),
}
)
pytest.importorskip("pyarrow", "11.0.0")
# GH 45694
expected = None
if dtype == "float":
Expand All @@ -671,6 +672,7 @@ def test_read_empty_array(self, pa, dtype):
class TestParquetPyArrow(Base):
def test_basic(self, pa, df_full):
df = df_full
pytest.importorskip("pyarrow", "11.0.0")

# additional supported types for pyarrow
dti = pd.date_range("20130101", periods=3, tz="Europe/Brussels")
Expand Down Expand Up @@ -938,6 +940,8 @@ def test_timestamp_nanoseconds(self, pa):
check_round_trip(df, pa, write_kwargs={"version": ver})

def test_timezone_aware_index(self, request, pa, timezone_aware_date_list):
pytest.importorskip("pyarrow", "11.0.0")

if timezone_aware_date_list.tzinfo != datetime.timezone.utc:
request.applymarker(
pytest.mark.xfail(
Expand Down

0 comments on commit 0962dcc

Please sign in to comment.