| """ |
| 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) |
|
|
| |
| tm.assert_frame_equal(df_block, df_array) |
|
|
| |
| 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) |
|
|
| |
| tm.assert_series_equal(s_block, s_array) |
|
|
| |
| 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): |
| |
| 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 |
|
|