| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- """
- Testing interaction between the different managers (BlockManager, ArrayManager)
- """
- import os
- import subprocess
- import sys
- import pytest
- from pandas.core.dtypes.missing import array_equivalent
- import pandas as pd
- import pandas._testing as tm
- from pandas.core.internals import (
- ArrayManager,
- BlockManager,
- SingleArrayManager,
- SingleBlockManager,
- )
- def test_dataframe_creation():
- msg = "data_manager option is deprecated"
- with tm.assert_produces_warning(FutureWarning, match=msg):
- with pd.option_context("mode.data_manager", "block"):
- df_block = pd.DataFrame(
- {"a": [1, 2, 3], "b": [0.1, 0.2, 0.3], "c": [4, 5, 6]}
- )
- assert isinstance(df_block._mgr, BlockManager)
- with tm.assert_produces_warning(FutureWarning, match=msg):
- with pd.option_context("mode.data_manager", "array"):
- df_array = pd.DataFrame(
- {"a": [1, 2, 3], "b": [0.1, 0.2, 0.3], "c": [4, 5, 6]}
- )
- assert isinstance(df_array._mgr, ArrayManager)
- # also ensure both are seen as equal
- tm.assert_frame_equal(df_block, df_array)
- # conversion from one manager to the other
- result = df_block._as_manager("block")
- assert isinstance(result._mgr, BlockManager)
- result = df_block._as_manager("array")
- assert isinstance(result._mgr, ArrayManager)
- tm.assert_frame_equal(result, df_block)
- assert all(
- array_equivalent(left, right)
- for left, right in zip(result._mgr.arrays, df_array._mgr.arrays)
- )
- result = df_array._as_manager("array")
- assert isinstance(result._mgr, ArrayManager)
- result = df_array._as_manager("block")
- assert isinstance(result._mgr, BlockManager)
- tm.assert_frame_equal(result, df_array)
- assert len(result._mgr.blocks) == 2
- def test_series_creation():
- msg = "data_manager option is deprecated"
- with tm.assert_produces_warning(FutureWarning, match=msg):
- with pd.option_context("mode.data_manager", "block"):
- s_block = pd.Series([1, 2, 3], name="A", index=["a", "b", "c"])
- assert isinstance(s_block._mgr, SingleBlockManager)
- with tm.assert_produces_warning(FutureWarning, match=msg):
- with pd.option_context("mode.data_manager", "array"):
- s_array = pd.Series([1, 2, 3], name="A", index=["a", "b", "c"])
- assert isinstance(s_array._mgr, SingleArrayManager)
- # also ensure both are seen as equal
- tm.assert_series_equal(s_block, s_array)
- # conversion from one manager to the other
- result = s_block._as_manager("block")
- assert isinstance(result._mgr, SingleBlockManager)
- result = s_block._as_manager("array")
- assert isinstance(result._mgr, SingleArrayManager)
- tm.assert_series_equal(result, s_block)
- result = s_array._as_manager("array")
- assert isinstance(result._mgr, SingleArrayManager)
- result = s_array._as_manager("block")
- assert isinstance(result._mgr, SingleBlockManager)
- tm.assert_series_equal(result, s_array)
- @pytest.mark.single_cpu
- @pytest.mark.parametrize("manager", ["block", "array"])
- def test_array_manager_depr_env_var(manager):
- # GH#55043
- test_env = os.environ.copy()
- test_env["PANDAS_DATA_MANAGER"] = manager
- response = subprocess.run(
- [sys.executable, "-c", "import pandas"],
- capture_output=True,
- env=test_env,
- check=True,
- )
- msg = "FutureWarning: The env variable PANDAS_DATA_MANAGER is set"
- stderr_msg = response.stderr.decode("utf-8")
- assert msg in stderr_msg, stderr_msg
|